自动登录技术

通过过滤器实现用户的自动登录功能。

1,首先是用户登录功能,用户登录时,需要输入用户名和密码,可以选择在多长时间以内自动登录,

2,提交登录到servlet,在servlet中判断用户名和密码是否与数据库中匹配,如果不匹配则返回一个用户名或密码错误的异常信息到登陆页面,让用户重新登陆

3,如果匹配,则封装用户名和密码到一个user对象中,并保存在session域中,以便于在这次会话中其他页面可以从session中获取用户信息,在顶部显示XXX,欢迎你信息。判断用户是否选择了自动登录功能,如果选择,则将用户名和密码用“-”连接存储到cookie的value中,以autoLogin为cookie的name,并设置cookie的最大生命为用户选择的时间(从单选按钮获取参数),设置路径为工程路径,然后添加cookie到响应中。将cookie发送给用户,用于下一次会话时判断用户是否选了自动登录。       

4,(核心)写一个过滤器,拦截全站的资源,在过滤器中,(先对request和response做向下强转)尝试获取名为autoLogin的cookie,如果存在,则记录cookie的值(应该是之前存的用户名和密码),如果获取的value是null,则放行,并结束当前函数,如果不是null,则将value的值拆分成用户名和密码,并封装成user对象记录在一个session域中,放行。

 

代码片段:

public class Filter1 implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		//强转
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		
		//设置全站编码。
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//获取用户cookie ,如果autoLogin不是null,则说明用于设置了自动登录,
		Cookie[] cookies = request.getCookies();
		String result = null;
		if(cookies!=null){
			for(int i=0;i<cookies.length;i++){
				if("autoLogin".equals(cookies[i].getName()))
					result = cookies[i].getValue();
				break;
			}
		}
		System.out.println("result"+result);
		
		
		if(result==null){
			//request.getSession().removeAttribute("user");
			//没有自动登录,直接放行。
			chain.doFilter(request, response);
			return;
		}
		//如果result不是null,说明用户选择了自动登录,分割字符串,取出用户名密码,封装到user中,并存储进session中,放行。
		String[] ss = result.split("-");
		String username = ss[0];
		String password = ss[1];
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		request.getSession().setAttribute("user", user);
		chain.doFilter(request, response);
	}

	public void destroy() {

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值