gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:23:13 25 4
gpt4 key购买 nike

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

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

Initializing Spring embedded WebApplicationContext

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

我有这个 EmbeddedServletContainerFactory:

@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 的子类,但它与我的 SpringBootServletInitializer 冲突。在我的 pom.xml 中,我有这些依赖项:

  • spring-boot-starter-jetty
  • spring-boot-starter-logging
  • spring-boot-starter

当我添加 spring-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,但是怎么做呢?

最佳答案

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

这仍然允许 Spring Boot 发挥它的魔力,并且您已经注册了您需要的附加端点。

另一种解决方案是将 servlet 作为 ServletRegistrationBean 添加到您的配置中,然后 Spring Boot 会自动将其添加。

关于java - 嵌入式 Jetty 环境中的 Spring Boot 和 Spring Security 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23828229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com