自动登录——(三)

1.   登录页面定义一个自动登录复选框

 

<span id="auto"></span><input type="checkbox" name="autologin" value="autologin"><lable style="color:red">自动登录</lable></span>

 

2.用户登录的时候判断用户是否选中自动登录,如果选中后设置cookie。

package web;

import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import daomain.User;
import service.UserService;

/**
 * 
 * @author: qlq
 * @date : 2017年7月6日上午10:19:37
 * @description: chuli denglu
 */

@WebServlet("/login")
public class login extends HttpServlet {
    private UserService userService = null;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        // 获取客户端输入
        String name = request.getParameter("name");  
        System.out.println(name);
        String password = request.getParameter("password");
        System.out.println(name + "\t" + password);
        userService = new UserService();
        User user = userService.findUserByNamePassword(name, password);
        // 登录成功
        if (user != null) {
            System.out.println(user.getName() + user.getPassword());
            request.getSession().setAttribute("user", user);
            System.out.println(user);
            String autologin = request.getParameter("autologin");
//            如果用户选择自动登录
            if (autologin != null) {
//                增加cookie,解码防止中文乱码
                Cookie cookie_username=new Cookie("username", URLEncoder.encode(user.getName(),"UTF-8"));
                Cookie cookie_password=new Cookie("password", user.getPassword());
//                设置生命期
                cookie_password.setMaxAge(60*60*24);
                cookie_username.setMaxAge(60*60*24);
//                设置cookie的携带路径
                cookie_password.setPath(request.getContextPath());
                cookie_username.setPath(request.getContextPath());
//                增加cookie
                response.addCookie(cookie_username);
                response.addCookie(cookie_password);
                System.out.println(autologin);
                
            } else {

            }
            request.getRequestDispatcher("/index.jsp").forward(request, response);
        }
        // 登录失败
        else {
            request.getRequestDispatcher("/login.html").forward(request, response);
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

 3.设置一个自动登录过滤器

package web.filter;

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.activation.URLDataSource;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import daomain.User;
import service.UserService;

/**
 * Servlet Filter implementation class autoLoginFilter
 */
public class autoLoginFilter implements Filter {

    /**
     * Default constructor. 
     */
    public autoLoginFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }


    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//        获得cookie进行用户名进行登录
        HttpServletRequest req =(HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        HttpSession session = req.getSession();
        Cookie[] cookies = req.getCookies();
        String username = null;
        String password = null;
        
        if(cookies!=null){
//            获得名字是username password的cookie
            for(Cookie cookie:cookies){
                if(cookie.getName().equals("username")){
//                    cookie不能设置中文,需要进行编码
                    username = URLDecoder.decode(cookie.getValue(), "UTF-8");
                }
                if(cookie.getName().equals("password")){
                    password = cookie.getValue();
                }
            }
        }
        
//        判断用户名和密码是否为空
        if(username!=null&&password!=null){
            UserService userService = new UserService();
            User user = userService.findUserByNamePassword(username, password);
            // 登录成功
            if (user != null) {
                System.out.println(user.getName() + user.getPassword());
                session.setAttribute("user", user);
                }
        }
        // pass the request along the filter chain
        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}

 

4.web.xml配置过滤器

  <filter>
    <filter-name>login</filter-name>
    <filter-class>web.filter.autoLoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>login</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping> 

 

5.自动登录一次查看cookie

posted @ 2017-08-07 20:49  QiaoZhi  阅读(260)  评论(0编辑  收藏  举报