providerSignInUtils.getConnectionFromSession(request)给出null异常

时间:2016-04-26 07:08:52

标签: java spring facebook spring-social

当我点击舔/auth/facebook?...以重定向到注册页面时,控制器会获得Connection<?> connection = providerSignInUtils.getConnectionFromSession(request);的用户信息。但是,它在这行代码中给了我一个空例外。

WebRequest有什么问题吗?

另外,我可以用ajax进行注册过程吗?

控制器方法:

@RequestMapping(value = "/facebookRegister", method = RequestMethod.GET)
    public String facebookRegister(Model model, WebRequest request){
        Connection<?> connection = providerSignInUtils.getConnectionFromSession(request);
        model.addAttribute(UserRegisterModel.fromConnection(connection));
        return "test/facebook";
    }

我的春季安全配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.exceptionHandling().authenticationEntryPoint(customAuthenticationEntryPoint())
            .and()
        .authorizeRequests()
        .antMatchers("/mngt/**").hasAuthority("UPDATE_USER_MANAGEMENT")
            .and()
        .logout().logoutUrl("/logout").logoutSuccessHandler(securityLogoutSuccessHandler()).deleteCookies("JSESSIONID").invalidateHttpSession(true)
            .and()
        .exceptionHandling().accessDeniedPage("/denied")
            .and()
        .csrf()
            .and()
        .rememberMe().key("remember-me").rememberMeServices(persistentTokenBasedRememberMeServices()).tokenValiditySeconds(1209600)
         .and().apply(new SpringSocialConfigurer().signupUrl("/user/facebookRegister"));

    http.addFilterBefore(usernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    http.addFilterAfter(rememberMeAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}

我的春季社交配置:

@Configuration
@EnableSocial
@PropertySource("classpath:social.properties")
public class SocialConfig extends SocialConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Autowired
    private Environment env;

    @Override
    public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) {
        FacebookConnectionFactory facebookConnectionFactory = new FacebookConnectionFactory(
                this.env.getProperty("facebook.clientId"), 
                this.env.getProperty("facebook.clientSecret"));

        cfConfig.addConnectionFactory(facebookConnectionFactory);
    }

    @Override
    public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
        return new JdbcUsersConnectionRepository (
                dataSource,
                connectionFactoryLocator,
                Encryptors.noOpText() 
        );

    }

    @Bean
    public ProviderSignInUtils providerSignInUtils(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository connectionRepository) {
        System.out.println("connectionFactoryLocator: " + (connectionFactoryLocator.registeredProviderIds().toString()) +  "   connectionRepository: " + (connectionRepository.toString()));
        return new ProviderSignInUtils(connectionFactoryLocator, connectionRepository);
    };

    @Override
    public UserIdSource getUserIdSource() {
        return new AuthenticationNameUserIdSource();
    }

}

0 个答案:

没有答案
相关问题