Rob*_*erd 6 java authentication spring spring-security spring-social
简而言之
使用ProviderSigninController时不会触发身份验证事件.如何使用完整的Spring安全集成?
长版
据我所知,我有一个功能性的Spring-social设置如下:
ProviderSignInController设置为创建社交连接,并在新用户出现时自动配置用户帐户.我使用SignInAdapter,如文档示例所示,
我还使用UserDetailsService定期进行基于spring-security的身份验证服务.
但是,我看到的一个区别是社交身份验证登录不会引发任何*AuthenticationEvents.这些事件都被过滤器定期账户提高.
我想知道 - 我是否错过了这种整合的一部分?.
看起来有点脆弱,不通过SocialAuthenticationFilter,只需手动设置auth上下文.
我想要一个记录认证事件的中心位置.
我也遇到过类似的情况,我想使用 SocialAuthenticationFilter 进行身份验证并通过 Spring Security 进行隐式注册,而不是 ProviderSignInController (我同意使用控制器感觉有点脏)。
我把它连接起来并且大部分工作正常,但是我丢失了正常登录给我的 onAuthenticationSuccess 事件。
为了让过滤器按我的需要工作,我最终所做的就是向其中添加一个 ObjectPostProcessor。这允许我在 SpringSocialConfigurer 深处初始化过滤器后手动设置 AuthenticationSuccessHandler (没有句柄)。
这是一个片段。
// Spring Social configurer integrates with Spring Security for us
.and().apply(new SpringSocialConfigurer()
.postLoginUrl("/")
// other setup
.addObjectPostProcessor(new ObjectPostProcessor<SocialAuthenticationFilter>() {
@Override
public <O extends SocialAuthenticationFilter> O postProcess(O filter) {
filter.setAuthenticationSuccessHandler(loginSuccessHandler);
return filter;
}
});
Run Code Online (Sandbox Code Playgroud)
loginSuccessHandler,与我通过,在正常过滤器配置中设置的 bean 相同.formLogin().successHandler(loginSuccessHandler)。
您还可以在此处设置 failureHandler。
这符合我的目的。该解决方案现在使用我的 SocialUserDetailsService 进行身份验证,并使用 ConnectionSignUp 进行隐式注册(在 UsersConnectionRepository 上注册时)。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |