SpringSecurity中由于自定义过滤器导致无法使用remember-me的问题解决

        今天给web项目的登录页面增加自动登录功能,选择使用SpringSecurity自带的remmeber-me功能键,但是前端页面传值remember-me:on始终无法起作用,在SpringSecurity源码中进行断点,发现可能是由于没有使用SpringSecurity自带的过滤器设置,使用了自定义过滤器(为了实现json传值登录)的原因。在此做个记录。

SpringSecurity中由于自定义过滤器导致无法使用remember-me的问题解决_第1张图片
        可以看到AbstractAuthenticationProcessingFilter中successfulAuthentication()方法中会调用rememberMeServices的loginSuccess()方法,只要配置中有.rememberMe(),在启动时就会自动装配TokenBasedRememberMeServices实现类给RememberMeServices属性。
        使用我自己写的过滤器(继承UsernamePasswordAuthenticationFilter)会发现这里RememberMeServices的实现类是NullRememberMeServices,所以始终无法正确自动登录。

解决办法:SpringSecurity中由于自定义过滤器导致无法使用remember-me的问题解决_第2张图片
注释掉自定义的过滤器,在配置中添加.formLogin()

你可能感兴趣的:(SpringBoot,java,spring,spring,boot,后端)