今天自己看了一下cookie 然后 做了一个小总结:
cookie 自动登录的实现原理 : 就是当你在登陆的时候 把 用户账号和密码放到cookie中 ,第二次登录直接判断cookie中是否有 用户账号和密码 有的话就直接跳过登录 直接进入视图页面 没有的话就进入登录页面
1. 在登录方法中 将获取到的用户和密码放到cookie中 :
boolean exist = isExist(request);
if (!exist) {
request.getSession().setAttribute("user", user);
//放入cookie
Cookie cookie1 = new Cookie("userName",username);
cookie1.setMaxAge(24 * 3600); //设置存放时长
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("password",password);
cookie2.setMaxAge(24 * 3600); //设置存放时长
response.addCookie(cookie2);
}
return "redirect:f.action";
这里用到了方法 isExist 是为了验证里面是否存在用户名和密码
/**
* 判断cookie 里面是否存在用户名和密码
* @return
*/
public boolean isExist(HttpServletRequest request) {
// 不存在的
boolean flag = false;
Cookie[] cs = request.getCookies();
int count = 0;// 记录比较次数
if (cs!=null) {
for (Cookie c : cs) {
if (c.getName().equals("userName")) {
count++;
}
if (c.getName().equals("password")) {
count++;
}
}
}
if(count==2) {
flag = true;
}
return flag ;
}
/**
* 获取cookie
* @return
*/
public String[] getCookie(HttpServletRequest request) {
String[] strs = new String[2];
Cookie[] cs = request.getCookies();
if (cs!=null) {
for (Cookie c : cs) {
if (c.getName().equals("userName")) {
// 获取账号
strs[0] = c.getValue();
}
if (c.getName().equals("password")) {
// 获取密码
strs[1] = c.getValue();
}
}
}
return strs;
}
/*********************************************************************************************************************/
将cookie中的账户和密码 放入request域中 :
@RequestMapping("/index")
public String index(HttpServletRequest request) {
String[] cookie = getCookie(request);
if (cookie.length==2) {
request.setAttribute("userName", cookie[0]);
request.setAttribute("password", cookie[1]);
}
return "index";
}
/**
* cookie专用方法,进入视图页面的方法
* @return
*/
@RequestMapping("/f.action")
public String ff() {
return "/home/fmain";
}
过滤器 : 当cookie里面有账户和密码时 走重定向 跳过登录页面直接进入视图页面 当cookie里面没有账户和密码时 重新进入登录页面
import java.io.IOException;
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;
@WebFilter("/*") //过滤路径
public class AuthFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain)
throws IOException, ServletException {
// 地址
HttpServletRequest request = (HttpServletRequest) srequest;
HttpServletResponse response = (HttpServletResponse) sresponse;
String path = request.getContextPath();
String url = request.getRequestURL().toString();
String uri = request.getRequestURI().toString();
// http://localhost:8080/jk/
url = url.substring(url.lastIndexOf("/")+1);
if (url.equals("index")||url.equals("")) {
//
boolean flag = isExist(request);
if (flag) {
response.sendRedirect("f.action");
return;
}
}
chain.doFilter(request, response);
}
/**
* 判断cookie 里面是否存在用户名和密码
* @return
*/
public boolean isExist(HttpServletRequest request) {
// 不存在的
boolean flag = false;
Cookie[] cs = request.getCookies();
int count = 0;// 记录比较次数
if (cs!=null) {
for (Cookie c : cs) {
if (c.getName().equals("userName")) {
count++;
}
if (c.getName().equals("password")) {
count++;
}
}
}
if(count==2) {
flag = true;
}
return flag ;
}
}