RuoYi shiro自定义的过滤器跑到applicationFilterChain中,建议去掉@Bean

RuoYi zzw 2022年3月18日 15:37 120 查看原文

输入图片说明 shiro自定义的过滤器onlineSessionFilter,syncOnlineSessionFilter,captchaValidateFilter到applicationFilterChain中。 输入图片说明 另外因为过滤器在applicationFilterChain中,后续在登陆的请求中原生的过滤器也会进行过滤,导致又进入了syncOnlineSessionFilter过滤器中,这好像就有点不对了。

因为加了@Bean注解,被spring创建了。 建议去掉注解。 输入图片说明

去掉注解后: 输入图片说明

回答
3 条回答

@y_project 作者你好,加了@Bean注解,因为继承了Filter接口,所以spring会默认将其加载进原生的过滤器中,默认匹配路径/*,因为OnlineSessionFilter、syncOnlineSessionFilter、CaptchaValidateFilter这三个加了Bean注解,所以就出现在下图中的原生的this.orig.filters中,而KickoutSessionFilter没有加Bean注解所有没有出现在下图中this.orig.filters中。 输入图片说明 在localhost/login请求先经过shiro配置的三个过滤器(invalidRequest是默认的一个全局过滤器),这三个过滤器之后,就会过this.orig.filters中的过滤器,在this.orig.filters中OnlineSessionFilter、syncOnlineSessionFilter、CaptchaValidateFilter将会进入,这就与我们shiro自定义拦截路径概念有冲突,因为这三个过滤器在原生的过滤器中,对于任何请求都会经过这三个过滤器。 输入图片说明 这个配置我们应该是只希望anon,captchaValidate,这两个起作用,其他的不起作用。 所以我的建议是这三个自定义过滤器应该像KickoutSessionFilter一样,去掉@Bean,避免spring将其加载进原始的过滤器中。shiro配置中定义的路径匹配了,相应的过滤器生效,这样才是我们想要的结果。

@vzzi 明白你的意思了,多谢提醒。已修改。 防止匿名访问进行过滤 https://gitee.com/y_project/RuoYi/commit/3f114ccc15885def4615214c204741a45dd0d061 有好的想法你也可以直接PR上来,当一名贡献者。 https://gitee.com/y_project/RuoYi/contributors?ref=master

没觉得有哪里问题。syncOnlineSessionFilter有限制访客不同步。

@y_project 作者你好,加了@Bean注解,因为继承了Filter接口,所以spring会默认将其加载进原生的过滤器中,默认匹配路径/*,因为OnlineSessionFilter、syncOnlineSessionFilter、CaptchaValidateFilter这三个加了Bean注解,所以就出现在下图中的原生的this.orig.filters中,而KickoutSessionFilter没有加Bean注解所有没有出现在下图中this.orig.filters中。 输入图片说明 在localhost/login请求先经过shiro配置的三个过滤器(invalidRequest是默认的一个全局过滤器),这三个过滤器之后,就会过this.orig.filters中的过滤器,在this.orig.filters中OnlineSessionFilter、syncOnlineSessionFilter、CaptchaValidateFilter将会进入,这就与我们shiro自定义拦截路径概念有冲突,因为这三个过滤器在原生的过滤器中,对于任何请求都会经过这三个过滤器。 输入图片说明 这个配置我们应该是只希望anon,captchaValidate,这两个起作用,其他的不起作用。

所以我的建议是这三个自定义过滤器应该像KickoutSessionFilter一样,去掉@Bean,避免spring将其加载进原始的过滤器中。shiro配置中定义的路径匹配了,相应的过滤器生效,这样才是我们想要的结果。

没觉得有哪里问题。syncOnlineSessionFilter有限制访客不同步。

热门问题
相关推荐
推荐分类