java使用cookie实现记住密码自动登录登录

我用的是maven工具 直接说一下思路
1.用户首次登陆的时候 将账号密码两个cookie保存在客户端 下次再打开登录页面的时候(/pow/toLogin)
进入doFilter方法 检测cookie是否存在或是否过期 如果没有过期那就把两个cookie取出来(我取的key是userName和passWord value是对应的用户输入框的值)然后跳转到登录过后的页面。即实现虽然打开的是登录页面 但跳转的时候 登录成功的页面。
2.代码只是参考(主要就是过滤器doFilter的方法和controller的登录方法) 思路很重要 首先要先了解什么是cookie
3.然后在搞清楚过滤器的用法
4.最后整合一下思路就好了
web.xml配置过滤器

<!-- 解决乱码、自动登录 -->
  	<filter>       
	    <filter-name>characterEncodingFilter</filter-name>      
	    <!-- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  -->   
	    <filter-class>cn.filter.CharacterEncodingFilter</filter-class>  
	    <init-param>       
	        <param-name>encoding</param-name>      
	        <param-value>UTF-8</param-value>      
	    </init-param>      
	    <init-param>      
	        <param-name>forceEncoding</param-name>      
	        <param-value>true</param-value>      
	    </init-param>      
	</filter>    
	<filter-mapping>      
	    <filter-name>characterEncodingFilter</filter-name>      
	    <url-pattern>/pow/toLogin</url-pattern>  <!-- pow路径下所有的匹配 --> 
	</filter-mapping> 

CharacterEncodingFilter.class

 package cn.filter;

/**
 * @author CTH
 * 
 */
import java.io.IOException;
import java.io.PrintWriter;

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 javax.servlet.jsp.JspWriter;


//字符集设置过滤器
public class CharacterEncodingFilter implements Filter {
	private String characterEncoding;// 字符集
	private String enforce;// 是否强制执行

	/**
	 * 1、由tomcat执行,没有请求前
	 * 加载实例化过滤器类
	 */
	public CharacterEncodingFilter() {
		//System.out.println("字符集过滤器实例!");
	}
	
	/**
	 * 2.初始化过滤器类
	 */
	@Override
	public void init(FilterConfig config) throws ServletException {
		//System.out.println("字符集过滤器初始化!");
		characterEncoding = config.getInitParameter("characterEncoding");// utf-8
		enforce = config.getInitParameter("enforce");// true
	}

	/**
	 * 3、执行过滤
	 *  执行请求和响应 
	 */
	@Override
	public void doFilter(ServletRequest req, ServletResponse rep, FilterChain chain) throws IOException, ServletException {
//		System.out.println("字符集过滤器开始!");
		// 判断是否有参数的设置
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) rep;
		//response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		//判断是否cookie记住密码
		Cookie[] cookies = request.getCookies();
		String userName = null,passWord = null;
		if(cookies!=null) {
			for(Cookie c : cookies) { 
				if(c.getName().equals("userName")) {
					userName = c.getValue();
				}
				if(c.getName().equals("passWord")) {
					passWord = c.getValue();
				}
			}
		}
		if(userName!=null&&passWord!=null) {
			PrintWriter out = response.getWriter();   		 
			out.print("");
			out.flush();
					
		} 
		  
		// 过滤器拦截放行
		chain.doFilter(req, rep);
//		System.out.println("字符集过滤器放行!");
	}
	
	/**
	 * 4、tomcat停机时执行
	 */
	@Override
	public void destroy() {
//		System.out.println("字符集过滤器销毁!");
		characterEncoding = null;
		enforce = null;
	}
}

login.jsp的登录页面的form表单

<form method="post" action="pow/regUser" class="form-validate" id="loginFrom">
	<div class="form-group">
		<input id="login-username" type="text" name="loginUserName" required data-msg="请输入用户名" placeholder="用户名" class="input-material">
	</div>
	<div class="form-group">
		<input id="login-password" type="password" name="loginPassWord" required data-msg="请输入密码" placeholder="密码" class="input-material">
	</div>
	<button id="login" type="submit" class="btn btn-primary">登录</button>
	<div style="margin-top: -40px;"> 
	<!-- <input type="checkbox"  id="check1"/>&nbsp;<span>记住密码</span>
		<input type="checkbox" id="check2"/>&nbsp;<span>自动登录</span> -->
	<div class="custom-control custom-checkbox " style="float: right;">
		<input type="checkbox" class="custom-control-input" name="auto_login" id="check2" >
		<label class="custom-control-label" for="check2">自动登录</label>
	</div>
	<div class="custom-control custom-checkbox " style="float: right;">
		<input type="checkbox" class="custom-control-input" id="check1" >
		<label class="custom-control-label" for="check1">记住密码&nbsp;&nbsp;</label>
	</div> 
	</div>
</form>

登录页面的用于判断是否勾选记住密码js

$(function(){
	/*判断上次是否勾选记住密码和自动登录*/
	var check1s=localStorage.getItem("check1");
	var check2s=localStorage.getItem("check2");
	var oldName=localStorage.getItem("userName");
	var oldPass=localStorage.getItem("passWord");
	if(check1s=="true"){
		 $("#login-username").val(oldName);
		 $("#login-password").val(oldPass);
		 $("#check1").prop('checked',true);
	}else{
		 $("#login-username").val('');
		 $("#login-password").val('');
		 $("#check1").prop('checked',false);
	} 
	if(check2s=="true"){
		 $("#login-username").val(oldName);
		 $("#login-password").val(oldPass)
		 $("#check2").prop('checked',true);
		 //$("#loginFrom").submit();
		//location="https://www.baidu.com?userName="+oldName+"&passWord="+oldPass;//添加退出当前账号功能
	}else{
		$("#check2").prop('checked',false);
	}
})

登录页面提交的controller 方法

//验证账号
	@RequestMapping("/regUser")
	public String regUser(ModelAndView md,HttpServletRequest request,HttpServletResponse response,
			@RequestParam(name="loginUserName" )String userName,
			@RequestParam(name="loginPassWord")String passWord,
			@RequestParam(name="auto_login" , defaultValue = "") String auto_login) throws UnsupportedEncodingException {
		//判断账号密码是否输入正确
		User user=userService.selUserByName(userName,passWord);
		if(user==null) {
			md.addObject("err","账号密码错误或账号不存在");
			md.setViewName("login");
			return "redirect:/pow/home";
		}
		
		//只要勾选了自动登录 那就把账号密码存入cookie,始终保存的是最新的cookie
		//如果勾选了自动登录auto_login=="on"
		//Cookie[] cookies = request.getCookies();
		if(auto_login.equals("on")) { 
//			System.out.println("点击了自动登录!");
			//创建cookie1,为其指定键名是userName,值是输入的用户名。
			Cookie cookie = new Cookie("userName", userName);
			Cookie cookie1 = new Cookie("passWord", passWord);
			//指定过期秒。1天
			cookie.setMaxAge(60*60*24);
			cookie1.setMaxAge(60*60*24);
			//将创建的Cookie输出到客户端。
			response.addCookie(cookie);
			response.addCookie(cookie1);
			System.out.println("cookie创建成功");
		}
		//md.setViewName("home");
		return "redirect:/pow/home";//到登录页面
	}

你可能感兴趣的:(cookie)