1. 程式人生 > >自動登錄——(三)

自動登錄——(三)

ccf vdh top not let ppr odin eol wmb

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

技術分享

自動登錄——(三)