自动登陆功能实现思想
作用就是下次再登陆首页之类的网站显示的和登陆过后的内容一样
要用到过滤器filter和cookie
之所以用cookie是因为cookie存放的事件更长,而session会在浏览器关闭或者超时的时候被销毁
再servlet中当用户登陆成功的时候判断用户是否选择自动登陆选项,是就将账号密码add到cookie中
创建一个过滤器拦截/*
先将ServletRequest强转为HttpServletRequest,再用request获取所有的cookies,然后用cookie的工具类查找到上传的cookie。
接着判断获取到的cookie是否为空,空代表第一次登陆或者cookie失效,就直接放行,不为空的话就需要再判断session是否为空,如果session不为空则直接放行,如果session为空
则需要完成登陆功能
先接收到cookie的数据,然后用切割成获取用户名和密码。。。。。。。。。。。
拦截器filte实现代码
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.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import cn.itcast.store.domain.User;
import cn.itcast.store.service.UserService;
import cn.itcast.store.service.Impl.UserServiceImp;
import cn.itcast.store.utils.CookUtils;
public class checkUserName implements Filter {
public checkUserName() {
}
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//将ServletRequest强转成HttpServletRequest
HttpServletRequest request=(HttpServletRequest) req;
//获取cookies
Cookie[] cookies = request.getCookies();
//获取指定的cookie
Cookie cookie = CookUtils.getCookieByName("aLogin", cookies);
//判断是否是第一次登陆
if(cookie!=null){
//不是第一次登陆
//获取session
String session = request.getParameter("user");
//判断session是否失效
if(session!=null){
//没失效直接放行
chain.doFilter(request, response);
}else{
//失效则需要完成登陆功能
String value=cookie.getValue();
String username=value.split("#")[0];
String password=value.split("#")[1];
User user=new User();
try {
user.setUsername(username);
user.setPassword(password);
UserService us=new UserServiceImp();
User user2 = us.userLogin(user);
request.getSession().setAttribute("user", user2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
servlet功能实现
//获取表单数据
Map map = request.getParameterMap();
//创建user对象存储获取的账号密码
User user=new User();
//调用工具类自动完成数据的匹配与加载
MyBeanUtils.populate(user, map);
//获取自动登陆选择
String aLogin=request.getParameter("aLogin");
//获取记住用户名选择
String rName=request.getParameter("rName");
//获取cookies
Cookie[] cookies = request.getCookies();
//查找指定的cookie
Cookie cookie = CookUtils.getCookieByName("aLogin", cookies);
System.out.println((rName!=null));
if(rName!=null){
request.getSession().setAttribute("rNameSession",user.getUsername());
System.out.println("是否选择"+rName+"================用户名:"+user.getUsername());
}
else{
request.getSession().setAttribute("rNameSession",null);
}
try{
//调用service方法
UserService us=new UserServiceImp();
//创建user对象用来存储service查询获得到的user
User user02=new User();
//利用抛异常的方法分情况处理登陆的问题
//执行service方法获得用户信息
user02=us.userLogin(user);
//将用户信息传到前台
request.getSession().setAttribute("user",user02);
//判断用户是否选择自动登陆按钮
if(aLogin!=null){
//选择自动登陆
cookie=new Cookie("aLogin",user02.getUsername()+"#"+user02.getPassword());
cookie.setMaxAge(60*60*24*7);//7天有效期
//设置有效路径
cookie.setPath("/store_07");
//将cookie上传到前端
response.addCookie(cookie);
}
response.sendRedirect("/store_07/jsp/index.jsp");
return null;
}catch (RuntimeException e) {
String msg=e.getMessage();
request.getSession().setAttribute("msg",msg);
return "/jsp/login.jsp";
}catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}```