我想将hawt.io作为嵌入式组件添加到具有嵌入式tomcat服务器的spring boot“ fat jar”应用程序中。
我怎样才能做到这一点?如何部署hawt.io war文件?
更新:我添加了依赖项:
当我现在启动应用程序并打开url localhost:8080 / hatio / index.html时* ,出现登录页面。由于我不知道用户名和密码,因此 向我的 application.properties 添加了 hawtio.authenticationEnabled = false。 *
但是-现在我得到一个警告’WARN 3420 — [nio-8080-exec-4] osweb.servlet.PageNotFound:请求方法’不支持POST’,后跟一个空指针异常。
参考:http : //hawt.io/configuration/index.html
我遇到了完全相同的问题-这就是我解决问题的方法。
我发现spring-boot不支持旧版的web.xml配置,这是maven-war-plugin在您自己的战争上将hawtio- web项目覆盖时得到的。产生的战争包含您的Web代码以及hawtio-Web存档的内容。
maven-war-plugin
参见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>
添加一个Configuration类来配置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
希望这可以帮助。
祝好运。