我试图了解我是否正确处理了我的服务器身份验证
我正在创建一个使用 Facebook 自动登录的服务器,另外我正在使用休眠
我通过使用与默认相同的过程来做到这一点,JdbcUsersConnectionRepository
但我总是返回一个用户。如果没有找到。
@Override public List<String> findUserIdsWithConnection(Connection<?> connection) { List<String> ret = new LinkedList<String>(); ConnectionKey key = connection.getKey(); MyUser myUser = userService.getUserBySocialConnection(key.getProviderId(), key.getProviderUserId()); if (myUser == null) { MyUser user = userService.createUserFromConnection(connection); String myUserId = String.valueOf(user.getId()); ret.add(myUserId); }else { ret.add(String.valueOf(myUser.getId())); } return ret; }
所以我signIn
有这个代码。登录用户:
public String signIn(String userId, Connection<?> connection, NativeWebRequest request) { MyUser user = userService.getUserById(Long.parseLong(userId)); Authentication authentication = SecurityToolbox.signInUser(user); // set remember-me cookie MyUser myu = (MyUser)authentication.getPrincipal(); userCookieGenerator.addCookie(String.valueOf(myu.getId()), request.getNativeResponse(HttpServletResponse.class)); return null; }
以及来自的登录代码SecurityToolBox
:
public static Authentication signInUser(MyUser user) { List<GrantedAuthority> authorities = getAuthorities(user); Authentication authentication = new UsernamePasswordAuthenticationToken(user, "", authorities); SecurityContextHolder.getContext().setAuthentication(authentication); return authentication; }
现在所有这一切都由userInterceptor
我编写的一个处理读取cookie(如果可用)并记住用户(如果存在)处理。我现在可以使用 cookie 发送给用户以记住我的最佳受保护信息是什么我正在发送用户 ID 但这不是我想要的
我现在想让 Spring Security 处理我的会话/remmeberme/身份验证过程,但我真的不明白我应该做什么。
第一个问题
我的代码是否足以正确地向服务器验证用户?,在下一个请求中。如果我问我userInterceptor
是否SecurityContextHolder.getContext().getAuthentication() != null
可以安全地假设用户已登录?
现在我想让spring security来处理我的身份验证,而不是自己用拦截器来做。所以我想创建一个身份验证管理器。但我不明白我需要在什么方面进行身份验证
public class CustomAuthenticationManager implements AuthenticationManager { public Authentication authenticate(Authentication auth) throws AuthenticationException {}}
我没有用户名和密码,我只是通过 facebook 进行身份验证才能登录,所以我用什么进行身份验证。总的来说,我在这里有一些知识差距,我真的不明白我应该怎么做才能让所有东西粘在一起
第二个问题authenticate
对于我的情况,函数中
究竟需要发生什么
第三个问题 我希望 Spring Security 处理会话和 cookie 以记住我。我知道有一个与 u/p 令牌相同的记住我令牌,但我仍然不明白我应该如何在我的情况下使用它。
第四个问题 现在整个登录过程发生在每个发送到服务器的请求(不是资源)上。这是它应该发生的方式吗?
谢谢。