自动登录

来源:互联网 发布:win7办公软件下载 编辑:程序博客网 时间:2024/05/01 11:46

用户登录,提交给loginServlet

<form action="${pageContext.request.contextPath }/servlet/LoginServlet?method=login" method="post">

记住用户名和两周内自动登录怎么写?

<tr><td colspan="2" style="text-align:center"><input type="checkbox" name="checkbox" value="checkbox" />记住用户名&nbsp;&nbsp;<input type="checkbox" name="autologin" value="auto" /> 两周内自动登录</td></tr>

LoginServlet处理提交的数据

public class LoginServlet extends HttpServlet{    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        String username = request.getParameter("username");        String password = request.getParameter("password");        if (username != null && password != null)        {            UserService service = new UserServiceImpl();            try            {                // A2 传入用户名和密码实现,找到对应user                User user = service.login(username, password);                // A4 如果用户点了自动登录,用Md5加密,保存到cookie,用户信息保存到session                String autologin = request.getParameter("autologin");                if (autologin != null)                {                    String md5 = MD5Utils.getMD5(user.getPassword());                    Cookie cookie = new Cookie("logininfo", user.getUsername() + "&" + md5);                    cookie.setPath("/");                    cookie.setMaxAge(60 * 60 * 24 * 14);//2周                    response.addCookie(cookie);                    System.out.println("cookie logininfo send" + user.getUsername() + "&" + md5);                }                // cookie属性为logininfo, session属性为user                request.getSession().setAttribute("user", user);                // A6 如果该用户是管理员,则这里应该跳转到管理员的后台管理界面                if ("admin".equals(user.getRole()))                {                    // 保存在Session内                    response.getWriter().println("登录成功,即将跳转到后台管理界面");                    response.setHeader("refresh", "2;url="+ request.getContextPath() + "/admin/login/home.jsp");                }                else                {                    // 否则跳转到主界面                    response.getWriter().println("登录成功,即将跳转到主页");                    response.setHeader("refresh", "2;url="+ request.getContextPath() + "/index.jsp");                }            }            catch (Exception e)            {                String eString = e.getMessage();                // 显示错误信息                request.setAttribute("user_login_msg", eString);                request.getRequestDispatcher("/login.jsp").forward(request,response);            }        }    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        doGet(request, response);    }}

service和Dao层查找数据

    @Override    public User findUserusername(String username, String password)    {        QueryRunner queryRunner = new QueryRunner(C3P0DBUtils.getCpds());        User user = null;        try        {            user = queryRunner.query("select * from user where username= ? and password = ?", new BeanHandler<User>(User.class),                username,password                   );        }        catch (SQLException e)        {            e.printStackTrace();        }        System.out.println("findUserusername"+user);        return user;     }

全局过滤器,用户访问登录界面的时候查看ssession,当用户登录成功之后,把下次自动登录需要的信息(用户名和密码),保存在cookie里,给浏览器。浏览器下次访问的时候,会把cookie(里面包含用户名和密码),带到服务器。服务器经过验证如果ok就直接登录

public class AutoLoginFilter implements Filter{    @Override    public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException    {// A7 遍历cookie 看看是否有携带自动登录的信息        HttpServletRequest req = (HttpServletRequest) request;        HttpSession session = req.getSession(false);        if (session != null)        {            if (session.getAttribute("user") != null)            {                //拿到jsp                String requestURI = req.getRequestURI();                System.out.println("requestURI=" + requestURI);                int lastIndexOf = requestURI.lastIndexOf("/");                String substring = requestURI.substring(lastIndexOf + 1);                System.out.println("substring=" + substring);                if (substring.equals("login.jsp"))                {//如果一开始就是login.jsp自动转发到主页                    req.getRequestDispatcher("/index.jsp").forward(request, response);                }            }        }        else        {            //session中没有的话,到cookie中找            Cookie[] cookies = req.getCookies();            if (cookies != null)            {// cookie不为空                for (int i = 0; i < cookies.length; i++)                {                    Cookie cookie = cookies[i];                    if (cookie.getName().equals("logininfo"))                    {                        // 拿到cookie并切割                        String logininfo = cookie.getValue();                        String[] split = logininfo.split("&");                        String username = split[0];                        String password_md5 = split[1]; // hashcode                        // 自动登录                        UserService service = new UserServiceImpl();                        try                        {                            // A8 cookie存在的话用md5加密,并把获得的user信息放入                            User user = service.loginByMd5(username,password_md5);                            if (user != null)                            {//cookie里面存在用户信息,则保存到session                                req.getSession().setAttribute("user", user);                                System.out.println("auto login success!!");                            }                        }                        catch (Exception e)                        {                            e.printStackTrace();                        }                    }                }            }        }    chain.doFilter(request, response);    }}

web.xml中注册,注册的时候长报错,注意注册filter的mapping应该放在servlet前面

<filter>        <filter-name>autologin</filter-name>        <filter-class>com.cskaoyan.bookStore.web.filter.AutoLoginFilter</filter-class>   </filter>   <filter-mapping>        <filter-name>autologin</filter-name>        <url-pattern>/*</url-pattern>   </filter-mapping>
0 0
原创粉丝点击