filter之自动登录

jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
  <form action="${pageContext.request.contextPath}/login" method="get">
	<table>
		<tr>
			<td>用户名</td>
			<td><input type="text" name="username"/></td>
		
		</tr>
		<tr>
			<td>密码</td>
			<td><input type="text" name="password"/></td>
		
		</tr>
		<tr>
			<td colspan="1"><input type="checkbox" name="saveName" value="ok">记住用户名</td>
			<td colspan="1"><input type="checkbox" name="autoLogin" value="ok">自动登录</td>
		</tr>
		<tr>
			<td colspan="2"><input type="submit"></td>
		</tr>
	
	</table>
  </form>
  <script type="text/javascript">
  	onload=function(){
  		var s = "${cookie.savename.value}";
  		s = decodeURI(s);
  		//alert(s);
  		document.getElementsByName("username")[0].value=s;
  		
  		
  	}
  </script>

</body>
</html>

servlet

package com.huida.web.servlet;

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

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


import com.huida.bean.User;
import com.huida.constant.Constant;
import com.huida.service.UserService;

/**
 * 登录
 */
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0设置编码
		request.setCharacterEncoding("utf-8");
		//1.获取用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		System.out.println(username+"...."+password);
		//2.调用service
		User user=null;
		
		
		try {
			 user = new UserService().login(username, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//3.判断user是否为空
		if(user==null){
			//System.out.println("没有此用户");
			request.getRequestDispatcher("/login.jsp").forward(request, response);
			//System.out.println("为空了....");
			return;
		}else{
			//System.out.println("有此用户");
			//不为空  跳转到sucess.jsp
			request.getSession().setAttribute("user", user);
			//判断是否勾选了自动登录 若勾选了需要将用户名和密码放入到cookie中,写回浏览器 cookie不支持中文
			if(Constant.IS_AUTO_LOGIN.equals(request.getParameter("autoLogin"))){
				Cookie c = new Cookie("autologin",username+"-"+password);
				c.setMaxAge(3600);
				c.setPath(request.getContextPath()+"/");
				response.addCookie(c);
				
			}
			//判断是否勾选 了记住用户名
			//Constant.IS_SAVE_NAME.equals(request.getParameter("saveName"))
			//Constant.IS_SAVE_NAME.equals(request.getParameter("saveName"))
			if(true){
				System.out.println("进来了");
				//创建cookie
				Cookie c = new Cookie("savename", URLEncoder.encode(username,"utf-8"));
				c.setMaxAge(3600);
				c.setPath(request.getContextPath()+"/");
				response.addCookie(c);

			}
			
			
			
			//页面重定向
			response.sendRedirect(request.getContextPath()+"/success.jsp");
		}
		
	}

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

}

filter

package com.huida.web.filter;

import java.io.IOException;
import java.sql.SQLException;

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.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.huida.bean.User;
import com.huida.service.UserService;
import com.huida.utils.CookUtils;

import net.sf.json.JSON;
import net.sf.json.JSONArray;

public class AutoLoginFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		//强转
		HttpServletRequest request = (HttpServletRequest)arg0;
		HttpServletResponse response = (HttpServletResponse)arg1;
		//判断session中有无登录用户没有的话继续自动登录
		User user = (User) request.getSession().getAttribute("user");
		//System.out.println(JSONArray.fromObject(user));
		if(user==null){
			//没用用户  需要自动登录
			//判断访问的资源是否有和登录注册相关,若相关则不需要自动登录
			String path = request.getRequestURI();
			//System.out.println(path);
			if(!path.contains("/login")){
				//获取指定的cookie
				Cookie c = CookUtils.getCookieByName("autologin",request.getCookies());
				//判断cookie是否为空
				//若不为空 获取值(username password) 调用service完成登录
				if(c!=null){
					String username = c.getValue().split("-")[0];
					String password = c.getValue().split("-")[1];
					//调用service完成登录
					//User user = null;
					try {
						user = new UserService().login(username, password);
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if(user!=null){
						//将user放入session中
						request.getSession().setAttribute("user", user);
						
					}
					
				}
				
			}
			
		}
		
		
		
		arg2.doFilter(arg0, arg1);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_42735880/article/details/83002626
今日推荐