我正在使用spring security进行身份验证来创建Spring MVC Web应用程序。
我的应用程序要求用户在访问特定网址时自动登录,例如http://www.example.com/login?username=xyz
用户xyz在数据库中,我需要自动为该用户创建会话。
请您告诉我这是如何实现的。
谢谢!
答案 0 :(得分:0)
你可以做这样的事情,想法是从数据库中检索用户,进行你想要的检查,然后使用UsernamePasswordAuthenticationToken
在当前会话中创建一个新的Principal。
该方法的返回Principal的使用是针对同一请求的后续使用,因为在下一个请求之前,Principal将无法通过常规方式检索。
public Principal doAutoLogin(String username, String password, HttpServletRequest hreq, HttpServletResponse hres, boolean rememberMe) {
User user = getUserFromDatabase(username);
if(user != null && passwordsMatch(password, user.getPassword())) {
try {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
token.setDetails(new WebAuthenticationDetails(hreq));
if(LOG.isDebugEnabled())
LOG.debug("Logging in with "+ token.getPrincipal());
SecurityContextHolder.getContext().setAuthentication(token);
if(rememberMe) {
rememberMeServices.onLoginSuccess(hreq, hres, token);
}
return token;
} catch (Exception e) {
SecurityContextHolder.getContext().setAuthentication(null);
LOG.error("Failure in autoLogin", e);
return null;
}
}
else {
throw new IllegalArgumentException("The specified credentials can't be found");
}
}