Spring Security和自定义filter的冲突导致多执行的解决方案

 更新时间:2021年06月22日 16:41:47   作者:程序员救不了第四宇宙  
这篇文章主要介绍了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" />

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis在DAO层定义接口返回类型泛型无效的解决

    MyBatis在DAO层定义接口返回类型泛型无效的解决

    这篇文章主要介绍了MyBatis在DAO层定义接口返回类型泛型无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java使用hashMap缓存保存数据的方法

    java使用hashMap缓存保存数据的方法

    这篇文章主要介绍了java使用hashMap缓存保存数据的方法,结合实例形式简单分析了java基于hashmap读写缓存数据的相关操作技巧,需要的朋友可以参考下
    2016-08-08
  • Windows环境IDEA下Ranger1.2.0源码编译详细流程

    Windows环境IDEA下Ranger1.2.0源码编译详细流程

    本文给大家讲解Windows环境IDEA下Ranger1.2.0源码编译过程,通过配置Tomcat,发布 security-admin-web项目,编译启动tomcat即可完成,需要的朋友参考下
    2021-06-06
  • java Springboot实现教务管理系统

    java Springboot实现教务管理系统

    这篇文章主要介绍了java Springboot实现教务管理系统的过程,文章围绕实现过程展开全文详细内容,具有一定的参考价值,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • Java设计模式之代理模式详解

    Java设计模式之代理模式详解

    这篇文章主要介绍了Java设计模式之代理模式详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • springboot实现rabbitmq的队列初始化和绑定

    springboot实现rabbitmq的队列初始化和绑定

    这篇文章主要介绍了springboot实现rabbitmq的队列初始化和绑定,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • JDK20 + SpringBoot 3.1.0 + JdbcTemplate 使用案例详解

    JDK20 + SpringBoot 3.1.0 + JdbcTemplate 使用案例详解

    通过 JdbcTemplate 直接执行 SQL 语句,结合源码动态编译即可方便实现动态修改代码逻辑的效果,这篇文章主要介绍了JDK20 + SpringBoot 3.1.0 + JdbcTemplate 使用,需要的朋友可以参考下
    2023-09-09
  • Java实现简单订餐系统

    Java实现简单订餐系统

    这篇文章主要为大家详细介绍了Java实现简单订餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • java源码解析之String类的compareTo(String otherString)方法

    java源码解析之String类的compareTo(String otherString)方法

    这篇文章主要给大家介绍了关于java源码解析之String类的compareTo(String otherString)方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • 基于java实现具有时效性文件链接

    基于java实现具有时效性文件链接

    这篇文章主要为大家详细介绍了如何基于java实现具有时效性的文件链接,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-12-12

最新评论