java-Spring Security会自动过滤注入吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Spring Security会自动过滤注入吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1926字,纯文字阅读大概需要3分钟。
内容图文
![java-Spring Security会自动过滤注入吗?](/upload/InfoBanner/zyjiaocheng/683/944eaaf417ec467db26869542c3dc2f6.jpg)
我有一个使用spring-security core v4.1.1.RELEASE的spring-boot应用程序(spring-boot v1.3.3.RELEASE).
看来,如果我通过扩展OncePerRequestFilter或GenericFilterBean来制作自定义滤镜豆,则无论我是否在自定义中传递给configure()的HttpSecurity对象上调用addFilter(),我的滤镜都会自动添加到滤镜链中WebSecurityConfigurerAdapter类.
这是自定义过滤器代码:
@Component
public class CustomFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// custom filter code here
}
}
这是缩写的安全配置代码:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
// not adding the custom filter here
http.authorizeRequests()
.antMatchers("/api/login/**").permitAll()
.anyRequest().authenticated();
}
}
我观察到的是,即使我没有将其添加到过滤器链中,所有请求,即使是对/ api / login的请求,都将通过CustomFilter.如果我声明的CustomFilter没有任何@Configuration或@Bean批注,则除非将其在SecurityConfiguration类中明确告知,否则不会将其添加到过滤器链中.
我的问题:这是预期的行为吗?如果是这样,为什么?在我看来,由于缺少更好的词,将过滤器自动添加到过滤器链是很危险的-无论我在SecurityConfiguration中指定了什么,每个请求都会通过过滤器.
解决方法:
主要区别在于,当您添加提及的常规过滤器时,它将被添加到主servlet容器过滤器链中,并且当您通过HttpSecurity.addFilter(Filter)添加过滤器时,它将被添加到安全性FilterChainProxy中.过滤器链代理基本上是它在Filter实现中的自己的过滤器链,委派给代理内的过滤器.因此,您的过滤器不会干扰安全过滤器.
举例说明,可能是这样的:
> CustomFilter
> FilterChainProxy(SessionFilter,BasicAuthFilter等)
>其他自定义过滤器
> OtherFilterChainProxy(OAuth2Filter等)
因此,Servlet容器会看到4个过滤器. 2个自定义过滤器和2个Spring Security配置.当到达FilterChainProxy时,代理仅委托给内部链中的第一个过滤器,前提是且仅当您的配置允许该安全配置拦截请求URL时.
内容总结
以上是互联网集市为您收集整理的java-Spring Security会自动过滤注入吗?全部内容,希望文章能够帮你解决java-Spring Security会自动过滤注入吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。