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

时间:2015-01-06 15:44:45

标签: java spring authentication spring-security spring-social

简而言之

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

长版

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

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

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

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

我想知道 - 我是否错过了这种整合的某些部分? 看起来有点脆弱,不通过SocialAuthenticationFilter,只需手动设置身份验证上下文。

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

1 个答案:

答案 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。

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

希望这有帮助。