当前位置: 首页 > 知识库问答 >
问题:

嵌入式Jetty环境中的Spring Boot和Spring Security集成

包建义
2023-03-14

我正试图从一个带有Spring Boot和嵌入式Jetty的“胖”可执行JAR中的main()方法初始化Spring Security性。我在Java配置中使用Spring Security性(没有web.xml)。问题是嵌入式Jetty无法注册springSecurityFilterChain过滤器

当我在Jetty中运行与WAR相同的JAR(mvn Jetty:run)时,它工作正常,我看到:

Initializing Spring embedded WebApplicationContext

但在嵌入式Jetty中运行时,我没有看到WebApplicationContext被初始化。

我有一个嵌入式ServletContainerFactory

@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
    JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
    factory.setPort(8080);
    factory.addServerCustomizers(new JettyServerCustomizer() {
        public void customize(Server server) {    
        // TODO: INITIALIZE SPRING SECURITY SOMEHOW...
        }
    });
    return factory;
}

我曾尝试创建AbstractSecurityWebApplicationInitializer的子类,但它与我的SpringBootServletilizer冲突。在我的pom中。xml我有以下依赖关系:

  • spring boot starter jetty
  • spring boot starter日志记录
  • spring boot starter

当我添加sping-boot-web时,它会抛出:

java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling

我还试图向Jetty注册DelegatingFilterProxy,但它抛出:

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?

我想我需要告诉Jetty使用WebApplicationContext,但是如何使用呢?

共有1个答案

傅峰
2023-03-14

您的设置禁用Spring Boot来发挥它的魔力。让Spring Boot来处理它,而不是自己设置容器。您可以简单地将您的JettyServerCustomizer作为@Bean添加到配置中。这将执行它,您可以注册您需要的任何东西。

这仍然允许Spring Boot发挥其魔力,并且您已经注册了所需的额外endpoint。

另一种解决方案可以是将servlet添加为一个Servlet注册Bean到您的配置中,然后它将由Spring Boot自动添加。

 类似资料:
  • 本文向大家介绍SpringBoot + SpringSecurity 环境搭建的步骤,包括了SpringBoot + SpringSecurity 环境搭建的步骤的使用技巧和注意事项,需要的朋友参考一下 一、使用SpringBoot+Maven搭建一个多模块项目(可以参考这篇文章 --> 这里) 二、删除父工程的src文件,删除app、browser、core下的.java文件 依赖关系: dem

  • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

  • 我正在寻找在嵌入式Jetty WebAppContext contextPath中的通配符支持,但无法找到任何。我有以下代码为我的购物WebApp: 我希望,如果访问http://ip:port/shopping/任何东西,它应该加载我上面的WebApp。但事实并非如此。我也尝试了path=“/shopping/*”,但它也不起作用。 这里有人能帮助我吗,如果它可能或不可能,或者我在这里做错了什么

  • 我的应用程序在嵌入式 Jetty 9.2.11 上运行良好,但是在使用 maven 汇编插件组装后,只提供在 web.xml 中声明的 servlet。 我的jar包含使用Servlet 3.0格式的许多jar被放置在中,每个jar都带有。从 NetBeans 运行时,可以很好地发现这些内容。 所有的< code>web.xml和< code>web-fragment.xml文件都非常标准。只有s

  • Eureka Discovery服务器(包括/config/*服务器上的云配置服务)正在向Eureka服务器注册,并且Eureka仪表板显示了该实例。此服务在端口9001上运行,启用SSL并进行用户身份验证。服务照常工作。 然后我创建了一个新的SpringBoot服务,它连接到Eureka并注册到它。由于使用了自签名证书,我在这篇文章中编写了一个小的SSLConfguration类:如何覆盖Spr

  • 问题内容: 我正在使用嵌入式Jetty,我想添加一个servlet过滤器以在每个请求之前检查身份验证。我尝试按照以下示例进行操作,但签名似乎已更改。 我的Jetty启动器看起来像这样: 当我取消注释 我发现签名已更改。因此,我想退一步,问一问,对于嵌入式Jetty,如何添加一个在请求开始时运行的过滤器,并仅在满足某些条件时才允许请求继续进行? AuthenticationFilter类的开始看起来