Spring Security和自定义filter的冲突导致多执行的解决方案
问题描述:
使用Spring Security时,在WebSecurityConfig中需要通过@bean注解注入Security的filter对象,但是不知是不是因为spring boot框架的原因还是什么未知原因,导致在这里注入,就会多注入一次这个对象,导致filter链走完之后,又会回到这个filter中再执行一次。
@Bean
public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception {
return new JwtAuthenticationTokenFilter();
}
这是WebSecurityConfig.java中原本需要注入的对象。
httpSecurity
.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
添加到Security中,这时,可能就会因为这一次的注入,导致filter链在本应该执行完之后,再一次执行添加到Security的filter……
解决办法:
将这两个代码段注释掉即可解决,当然,只是解决filter链执行完后再执行Security的filter的问题,本质上来说并不能真正的解决问题。如果有更好的理解或者更好的解决方法,欢迎讨论。
2019-5-9 16:49:00:之前这么做发现,这样Spring Security就相当于没有作用了,但是filter还是会起作用,而如果启用Spring Security,还是会进入filter……如果授权自定义的话Spring Security感觉没有用处了,当然这是我碰到的问题,框架也是别人搭起来的,但是用法是不对的,导致写的filter变成了自定义的,感觉跟Spring Security框架格格不入,如果有大佬知道的话欢迎指导!谢谢。
如果要使用Spring Security,那么就需要将JwtAuthenticationTokenFilter上的@Component注解删除或者注释掉,因为二次注入的类都是这个,但是产生的类对象应该是不一样的,所以会导致二次进入filter。
所以搞得我现在很怀疑Spring Security是不是有必要……
Spring Security3自定义安全过滤器位置及注意事项
当auto-config="true"时,springSecurity自动创建过滤器链
1.自定义过滤器位置需要在已有过滤器之前或之后,否则会报错;
2.由于FilterSecurityInterceptor安全observeOncePerRequest(每个请求一次)默认为true.
默认情况下FilterSecurityInterceptor只会执行一个,所以如果既要执行默认安全过滤器又要执行自定义过滤器,自定义过滤器放到默认安全过滤器之前,同时observeOncePerRequest设置为false.
如:
(1)
<custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="menuFilter" />
(2)
<beans:property name="observeOncePerRequest" value="false" />
以上为个人经验,希望能给大家一个参考,也希望大家多多支持无名。
同类资源
- HCIP-Security题库
HCIP-Security题库本文件感兴趣的可以参考一下,网络安全工程师题库。...
- Java基于springboot教务管理系统
Java基于springboot教务管理系统本文件感兴趣的可以参考一下,帮助学校管理教务系统,用一个帐号解决学校教务...
- Java EE企业级应用开发教程Spring+Spring MVC+MyBatis实验报告
JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis实验报告本文件感兴趣的可以参考一下。...
- springBootNoMaven实现定时任务功能
springBootNoMaven本文件感兴趣的可以参考一下,不使用maven环境,创建springboot项目,实现了定时任务功能简单...
- agilebpm-base-spring-boot.rar
agilebpm-base-spring-boot.rar本文件感兴趣的可以参考一下,基于activiti实现的审批工作流web端项目。...
- 数据库课设论文加源码mysql Java spring
数据库课设论文加源码mysqlJavaspring绿色版,数据库课程设计舍友信息管理系统,mysql,javaspring整篇论文。...
- 基于SpringMVC,Spring,Mybatis,BootStrap教务管理系统
基于SpringMVC,Spring,Mybatis,BootStrap教务管理系统绿色版,基础信息管理、系统权限管理、版本管理、子系统...
- SpringBoot健身房管理系统
SpringBoot健身房管理系统绿色版,springboot+MySQL+thymeleaf。...
- 使用springboot2.x整合shiro包含sql数据库
使用springboot2.x整合shiro包含sql数据库例子源代码。...