简而言之
使用ProviderSigninController时不会触发身份验证事件。 如何使用完整的Spring安全集成?
长版
据我所知,我有一个功能性的Spring-social设置如下:
ProviderSignInController设置为创建社交连接,并在新用户出现时自动配置用户帐户。我使用SignInAdapter,如documented example所示,
我还使用UserDetailsService定期进行基于spring-security的身份验证服务。
但是,我看到的一个区别是社交身份验证登录不会引发任何* AuthenticationEvents。这些事件是由常规帐户的过滤器引发的。
我想知道 - 我是否错过了这种整合的某些部分? 看起来有点脆弱,不通过SocialAuthenticationFilter,只需手动设置身份验证上下文。
我想要一个记录身份验证事件的中心位置。
答案 0 :(得分:1)
我有类似的情况,我想使用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;
}
});
loginSuccessHandler
,就是我通过.formLogin().successHandler(loginSuccessHandler)
在普通过滤器配置中设置的bean。
你也可以在这里设置你的failureHandler。
这符合我的目的。该解决方案现在使用我的SocialUserDetailsService进行身份验证,使用ConnectionSignUp进行隐式注册(在UsersConnectionRepository上注册时)。
希望这有帮助。