spring-social をアプリに統合しようとしてきましたが、セキュリティ コンテキストでアクセス トークンを設定する必要があるユーザーに関するワークフローを理解するのに苦労しています。spring-social 1.1.4 libs と spring-social-twitter 1.1.2.RELEASE を使用しています。SpringSocialConfigurer を使用してソーシャル サインインを Twitter に追加し、/auth/twitter API をヒットして OAuth1 フローをトリガーし、リクエスト トークンを取得し、Twitter にリダイレクトしてログインし、認証済みのアクセス トークンを取得することができます。リクエストトークン。リクエスト トークンを取得したら、Twitter 接続が UserConnection テーブルに永続化されることを期待していました。しかし、それは起こっていませんが、代わりに /signup URL にリダイレクトされています。SocialAuthenticationFilter のコードを調べると、 ここに画像の説明を入力してください。
201 行目は null を返すため、206 行目が /signup URL にリダイレクトされます。認証が SocialAuthenticationToken に設定されていることを期待していました。ここで起こるべき流れを誤解していますか?これが参考になるかどうかはわかりませんが、SpringSocialConfigurer をフックした既存の spring-security フィルター チェーンは次のとおりです。
SpringSocialConfigurer springSocialConfigurer = new SpringSocialConfigurer()
.connectionAddedRedirectUrl("/connectionAdded")
.postLoginUrl("/postLogin")
//.postLoginUrl("/")
.signupUrl("/signup")
.defaultFailureUrl("/#/login")
.alwaysUsePostLoginUrl(true);
springSocialConfigurer
.addObjectPostProcessor(new ObjectPostProcessor<SocialAuthenticationFilter>() {
@Override
public <O extends SocialAuthenticationFilter> O postProcess(O filter) {
//filter.setAuthenticationSuccessHandler(loginSuccessHandler);
System.out.println(filter.getClass().getName());
return filter;
}
});
http.csrf()
.disable()
.headers()
.frameOptions()
.disable()
.and()
.sessionManagement()
.sessionFixation()
.none()
.enableSessionUrlRewriting(false)
.and()
.formLogin()
.permitAll()
.successHandler(successHandler)
.failureHandler(failureHandler)
.loginPage("/login")
.loginProcessingUrl("/login_post.htm")
.and()
.authorizeRequests()
.antMatchers("/account/wishlist/**", "/account/**", "/auth/**")
.access("isAuthenticated()")
.and()
.requiresChannel()
.antMatchers("/", "/**")
.requiresSecure()
.and()
.logout()
.invalidateHttpSession(true)
.deleteCookies("ActiveID")
.logoutUrl("/logout")
.and()
.portMapper()
.http(80)
.mapsTo(443)
.http(8080)
.mapsTo(8443)
.http(8081)
.mapsTo(8444)
.http(8082)
.mapsTo(8445)
.and()
.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(sessionFixationProtectionFilter, SessionManagementFilter.class)
.rememberMe()
.tokenValiditySeconds(1209600)
.and()
.apply(springSocialConfigurer);