我正在使用Facebook登录在我的应用程序中进行身份验证。我使用身份验证过滤器。
身份验证正常,但是当它重定向回主页时,过滤器似乎没有设置Authentication对象,因此调用SecurityContextHolder.getContext()。getAuthentication()将返回null。这仅在用户第一次授权我们的应用时发生。之后不会发生这种情况。
目前,要设置Authentication对象,用户必须“两次登录facebook”。第二次它实际上没有进行任何登录,过滤器看起来像是拿起cookie并进行身份验证,甚至不再需要去Facebook了。
所以我的问题是为什么我需要经过两次过滤器?或者我该如何避免这种情况?
配置如下所示:
AddOrUpdate
答案 0 :(得分:1)
看起来Spring并没有处理它自己的问题,虽然我觉得它应该可以用于配置,而不是必须为它编写代码,但这有点意义。无论如何,这是我们如何做到的:
@RequestMapping("/signup")
public String signUp(WebRequest request) {
Connection<?> connection = providerSignInUtils.getConnectionFromSession(request);
User user = usersConnectionRepository.createUser(connection);
getRepository().save(user);
providerSignInUtils.doPostSignUp(user.getId().toString(), request);
// the following will automatically log in the user after sign up
SecurityContextHolder.getContext().setAuthentication(new SocialAuthenticationToken(connection, user, null, user.getAuthorities()));
return "redirect:/home";
}