我应该同时使用SocialAuthenticationFilter和ProviderSignInController吗?

简而言之

使用ProviderSigninController时不会触发身份validation事件。 如何使用完整的Spring安全集成?

长版

据我所知,我有一个function性的Spring-social设置如下:

ProviderSignInController设置为创建社交连接,并在新用户出现时自动配置用户帐户。 我使用SignInAdapter,如记录的示例所示,

我还使用UserDetailsS​​ervice定期进行基于spring-security的身份validation服务。

但是,我看到的一个区别是社交身份validation登录不会引发任何* AuthenticationEvents。 这些事件由常规帐户的filter引发。

我想知道 – 我错过了这种整合的一部分吗?
看起来有点脆弱,不通过SocialAuthenticationFilter,只需手动设置auth上下文。

我想要一个记录认证事件的中心位置。

我有类似的情况,我想使用SocialAuthenticationFilter进行身份validation和使用Spring Security的隐式注册,而不是ProviderSignInController(我同意使用控制器感觉有点脏)。

我把它连接起来并且它大部分都有效,但我丢失了正常登录给我的onAuthenticationSuccess事件。

我最终做的是让我的filter按需要工作,就是向它添加一个ObjectPostProcessor。 这允许我在SpringSocialConfigurer深度初始化filter后手动设置我的AuthenticationSuccessHandler(没有句柄)。

这是一个片段。

// Spring Social configurer integrates with Spring Security for us .and().apply(new SpringSocialConfigurer() .postLoginUrl("/") // other setup .addObjectPostProcessor(new ObjectPostProcessor() { @Override public  O postProcess(O filter) { filter.setAuthenticationSuccessHandler(loginSuccessHandler); return filter; } }); 

loginSuccessHandler ,与我在普通filter配置中设置的bean相同,通过.formLogin().successHandler(loginSuccessHandler)

你也可以在这里设置你的failureHandler。

这符合我的目的。 该解决方案现在使用我的SocialUserDetailsS​​ervice进行身份validation,使用ConnectionSignUp进行隐式注册(在UsersConnectionRepository上注册时)。

希望这可以帮助。