我遇到了完全相同的问题-这就是我解决问题的方法。
我发现 spring-boot 不支持遗留的 web.xml 配置,这是你在maven-war-plugin
你自己的战争之上覆盖 hawtio-web 项目时得到的。由此产生的战争既包含您的 Web 代码,也包含 hawtio-web 存档的内容。
见http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html
所以我在spring开始了配置servlet和过滤器的过程。
首先将必要的依赖项添加到 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
<version>${spring-boot-version}</version>
</dependency>
<dependency>
<groupId>io.hawt</groupId>
<artifactId>hawtio-springboot</artifactId>
<version>${hawtio.version}</version>
</dependency>
<dependency>
<groupId>io.hawt</groupId>
<artifactId>hawtio-core</artifactId>
<version>${hawtio.version}</version>
</dependency>
</dependencies>
我使用这些版本:
<hawtio.version>2.0.0</hawtio.version>
<spring-boot.version>1.2.3.RELEASE</spring-boot.version>
添加一个配置类来配置 servlet 和过滤器:
@Configuration
public class HawtioConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/hawtio/plugins/**").addResourceLocations("/app/", "classpath:/static/hawtio/app/");
registry.addResourceHandler("/hawtio/**").addResourceLocations("/", "/app/", "classpath:/static/hawtio/",
"classpath:/static/hawtio/app/");
}
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
registry.addViewController("/hawtio/plugin").setViewName("forward:/plugin");
registry.addViewController("/hawtio/").setViewName("redirect:/hawtio/index.html");
}
@Bean
public ServletRegistrationBean userServlet() {
return new ServletRegistrationBean(new UserServlet(), "/user/*", "/hawtio/user/*");
}
@Bean
public ServletRegistrationBean jolokiaproxy() {
return new ServletRegistrationBean(new ProxyServlet(), "/hawtio/proxy/*");
}
@Bean
public ServletRegistrationBean kubeservice() {
return new ServletRegistrationBean(new ServiceServlet(), "/hawtio/service/*");
}
@Bean
public ServletRegistrationBean kubepod() {
return new ServletRegistrationBean(new PodServlet(), "/hawtio/pod/*");
}
@Bean
public ServletRegistrationBean fileupload() {
return new ServletRegistrationBean(new UploadServlet(), "/hawtio/file-upload/*");
}
@Bean
public ServletRegistrationBean loginservlet() {
return new ServletRegistrationBean(new LoginServlet(), "/hawtio/auth/login/*");
}
@Bean
public ServletRegistrationBean logoutservlet() {
return new ServletRegistrationBean(new LogoutServlet(), "/hawtio/auth/logout/*");
}
@Bean
public ServletRegistrationBean keycloakservlet() {
return new ServletRegistrationBean(new KeycloakServlet(), "/hawtio/keycloak/*");
}
@Bean
public ServletRegistrationBean exportcontextservlet() {
return new ServletRegistrationBean(new ExportContextServlet(), "/hawtio/exportContext/*");
}
@Bean
public ServletRegistrationBean mavenSource() {
return new ServletRegistrationBean(new JavaDocServlet(), "/hawtio/javadoc/*");
}
@Bean
public ServletRegistrationBean contextFormatter() {
return new ServletRegistrationBean(new ContextFormatterServlet(), "/hawtio/contextFormatter/*");
}
@Bean
public ServletRegistrationBean gitServlet() {
return new ServletRegistrationBean(new GitServlet(), "/hawtio/git/*");
}
@Bean
public ServletListenerRegistrationBean hawtioContextListener() {
return new ServletListenerRegistrationBean<>(new HawtioContextListener());
}
@Bean
public ServletListenerRegistrationBean fileCleanerCleanup() {
return new ServletListenerRegistrationBean<>(new FileCleanerCleanup());
}
@Bean
public FilterRegistrationBean redirectFilter() {
final FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new RedirectFilter());
filter.setUrlPatterns(Collections.singletonList("/hawtio/*"));
return filter;
}
@Bean
public FilterRegistrationBean sessionExpiryFilter() {
final FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new SessionExpiryFilter());
filter.setUrlPatterns(Collections.singletonList("/hawtio/*"));
return filter;
}
@Bean
public FilterRegistrationBean cacheFilter() {
final FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new CacheHeadersFilter());
filter.setUrlPatterns(Collections.singletonList("/hawtio/*"));
return filter;
}
@Bean
public FilterRegistrationBean CORSFilter() {
final FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new CORSFilter());
filter.setUrlPatterns(Collections.singletonList("/hawtio/*"));
return filter;
}
@Bean
public FilterRegistrationBean XFrameOptionsFilter() {
final FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new XFrameOptionsFilter());
filter.setUrlPatterns(Collections.singletonList("/hawtio/*"));
return filter;
}
@Bean
public FilterRegistrationBean AuthenticationFilter() {
final FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new AuthenticationFilter());
filter.setUrlPatterns(Arrays.asList("/hawtio/auth/*", "/jolokia/*", "/hawtio/upload/*", "/hawtio/javadoc/*"));
return filter;
}
}
我已经用 jetty 和 tomcat 测试了这个 - 它适用于两者。我也将此作为补丁提交给 hawtio,但尚未发布。您可以自己编译 hawtio 并导入 HawtioConfiguration:
https ://github.com/hawtio/hawtio/blob/master/hawtio-springboot/src/main/java/io/hawt/springboot/HawtioConfiguration.java
我还更新了 hawtio-sample 以使用 HawtioConfiguration:
https ://github.com/hawtio/hawtio/tree/master/hawtio-sample-springboot
现在我可以通过访问http://localhost:8080/hawtio/index.html来访问 hawtio
希望这可以帮助。
祝你好运。