自动登录

用户登录,提交给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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值