自動登錄——(三)
阿新 • • 發佈:2017-08-07
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
自動登錄——(三)