我有一个启用 Spring Security 的项目。我已经使用登录表单实现了“记住我”,效果很好。但我在登录表单上也有来自 google/facebook 的社交登录,效果很好。问题是他们不记得用户。有没有办法设置类似的“记住我”功能?
我当前的普通登录页面的 spring 配置:
<http access-denied-page="/login?authorization_error=true"
disable-url-rewriting="true" authentication-manager-ref="formAuthenticationManager"
xmlns="http://www.springframework.org/schema/security">
<intercept-url pattern="/account/**" access="ROLE_USER" />
<remember-me key="iRemember"
token-validity-seconds="1209600" user-service-ref="formClientDetailsUserService" />
<form-login authentication-failure-url="/login?authentication_error=true"
default-target-url="/account/" login-page="/login"
login-processing-url="/login.do" />
<logout logout-success-url="http://example.com" logout-url="/logout" />
<anonymous />
</http>
我有一些类似的要求。
我尝试将身份验证网址设置为/auth/facebook?_spring_security_remember_me=true
(refer AbstractRememberMeServices.rememberMeRequested
)。但是之后,org.springframework.social.security.SocialAuthenticationFilter.detectRejection https://github.com/spring-projects/spring-social/blob/master/spring-social-security/src/main/java/org/springframework/social/security/SocialAuthenticationFilter.java#L165不会让这件事过去。它的编码如下:
protected boolean detectRejection(HttpServletRequest request) {
Set<?> parameterKeys = request.getParameterMap().keySet();
return parameterKeys.size() > 0
&& !parameterKeys.contains("oauth_token")
&& !parameterKeys.contains("code")
&& !parameterKeys.contains("scope");
}
我认为如果我们可以在那里添加另一个条款,它就可以起作用。然后我想通过子类化来覆盖它SocialAuthenticationFilter
。但随后在SpringSocialConfigurer
它不是注入的,而是使用实例化的new
关键词。子类化SpringSocialConfigurer
似乎也不是一个解决方案,因为里面有很多有用的私有字段。所以,我认为解决方案就是复制SpringSocialConfigurer
进入另一个类,并将其与子类一起使用SocialAuthenticationFilter
。如果我正确理解了这一切,那么这一切似乎都像是黑客行为,我认为我们应该创建一张票以获取适当的“记住我”支持。
当然,如果我们想记住我一直在线,通过设置alwaysRemember
的领域RememberMeServices
,我这样做:
@Bean
public RememberMeServices rememberMeServices() {
TokenBasedRememberMeServices rememberMeServices = new TokenBasedRememberMeServices(rememberMeKey, userService);
rememberMeServices.setAlwaysRemember(true);
return rememberMeServices;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)