以编程方式登录用户SPring MVC

时间:2014-08-21 18:42:37

标签: java spring spring-mvc spring-security

我正在使用spring security进行身份验证来创建Spring MVC Web应用程序。

我的应用程序要求用户在访问特定网址时自动登录,例如http://www.example.com/login?username=xyz

用户xyz在数据库中,我需要自动为该用户创建会话。

请您告诉我这是如何实现的。

谢谢!

1 个答案:

答案 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");
        }
    }