拦截器实现自动登陆功能

自动登陆功能实现思想

作用就是下次再登陆首页之类的网站显示的和登陆过后的内容一样

要用到过滤器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;
	}```

猜你喜欢

转载自blog.csdn.net/qq_42799000/article/details/82830230
今日推荐