在 Spring Boot 库的上下文中添加新的 spring-security 链过滤器的预期方法
Posted
技术标签:
【中文标题】在 Spring Boot 库的上下文中添加新的 spring-security 链过滤器的预期方法【英文标题】:Intended way to add a new spring-securty chain Filter in the context of a spring boot library 【发布时间】:2022-01-08 05:57:39 【问题描述】:我正在开发一个库,它引入了一个新的身份验证过滤器,应该在 spring-security 链中使用
我知道我可以通过以下方式添加过滤器:
@EnableResourceServer
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
class AmazingSecurityConfiguration extends WebSecurityConfigurerAdapter
// filter bean
@Autowired
private MyFilter myFilter;
@Override
public void configure(HttpSecurity http) throws Exception
http.authorizeRequests()
// ... bunch of requirements per path
// ... or ignore path "/bla"
// etc.
.anyRequest().authenticated();
http.addFilterBefore(myFilter.getFilter(),
AbstractPreAuthenticatedProcessingFilter.class);
但是,这不适用于用户定义的配置。真的,我想在我的库 AutoConfigure 类中配置这个 bean,它是由 spring 工厂触发的。
在网上环顾四周,我看到他们自己扩展 WebSecurityConfigurerAdapter
类并让用户扩展此 new config 的示例。但我不知道这是否会阻止用户执行其他操作,并且它还依赖于用户首先调用 super.configure(http)
来加载过滤器。
这里的正确方法是什么?
【问题讨论】:
【参考方案1】:我能够通过摆弄自动配置中 bean 的调用顺序来配置我自己的 http
配置
@Configuration
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
// Two annotations below ensure that this is not the only WebSecurityConfigurerAdapter,
// as it might otherwise disable security for the rest of the application
// The Order ensures that Spring default which uses ConditionalOnMissingBean is still configured before this class
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
@ConditionalOnBean(WebSecurityConfigurerAdapter.class)
class LibraryFooSecurityConfig
@RequiredArgsConstructor
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
class WebSecurityConfig extends WebSecurityConfigurerAdapter
// autowired in from elsewhere in the autoconfig
private final MyFilter filter;
@Override
public void configure(HttpSecurity http) throws Exception
http
.addFilterBefore(filter,
AbstractPreAuthenticatedProcessingFilter.class);
这允许用户定义的安全配置扩展 WebSecurityConfigurerAdapter
并应用他们自己的规则,同时仍然允许我们的库在实际 spring-boot 应用程序之后添加它自己的项目 p>
【讨论】:
以上是关于在 Spring Boot 库的上下文中添加新的 spring-security 链过滤器的预期方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 应用程序中添加两个上下文路径
从 https 切换到 http 时登录后 spring-boot 用户会话未添加到上下文中