spring-social:SecurityContextHolder.getContext()。getAuthentication()返回null

时间:2018-02-16 18:03:49

标签: spring-social spring-social-twitter

我一直在尝试将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中的代码后,我看到: enter image description here

其中第201行返回null,因此,触发第206行重定向到/注册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);

0 个答案:

没有答案