package cn.lnu.web.filter.example; import java.io.IOException; import java.security.MessageDigest; 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 sun.misc.BASE64Encoder; import cn.lnu.domain.User; import cn.lnu.service.BusinessService; //�����û����������󣬼���û������Ƿ��cookie��������������ˣ��͸���cookie��Ϣ���û��Զ���¼�����û�д�cookieֱ�ӷ��� public class AutoLoginFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request=(HttpServletRequest) req; HttpServletResponse response=(HttpServletResponse) resp; //1������û���û���Ѿ���¼(���session����û�д��¼���)��û��¼���Զ���¼ User user=(User) request.getSession().getAttribute("user"); if(user!=null){//����Ѿ���¼��ֱ�ӷ��� chain.doFilter(request, response); return; } //2,û��½����ִ���Զ���¼�߼� //���û���û�д��Զ���¼��cookie Cookie autoLoginCookie=null;//�û������ҵ����Զ���¼��cookie Cookie cookies[]=request.getCookies(); for(int i=0;cookies!=null&&i<cookies.length;i++){ if(cookies[i].getName().equals("autologin")){ autoLoginCookie=cookies[i]; break; } } if(autoLoginCookie==null){//��ʾ���û���һ�ε�¼,˵��û���Զ���¼cookie��ֱ�ӷ��� chain.doFilter(request, response); return; } //�û������Զ���¼cookie�����ȼ��cookie��Ч�ڵ���Ч�� String values[]=autoLoginCookie.getValue().split("\\:"); if(values.length!=3){ chain.doFilter(request, response); return; } long expirestime=Long.parseLong(values[1]); if(System.currentTimeMillis()>expirestime){ chain.doFilter(request, response); return; } //,����cookie����Ч������Ч�ģ��ټ��cookie�������Ч�� String username=values[0]; String client_md5=values[2]; BusinessService service=new BusinessService(); user=service.findUser(username); if(user==null){ chain.doFilter(request, response); return; } String password=user.getPassword(); //���û���������,cookie��Ч����ϳ�md5(password:expirestime:username)��ʽ String server_md5=md5(username,password,expirestime); //����������˺Ϳͻ��˵Ĵ�������Ϣ��md5�� if(!server_md5.equalsIgnoreCase(client_md5)){//����ͻ�����������˴�������Ϣ��md5�벻ƥ��ͷ��� chain.doFilter(request, response); return; } //���ִ�е�¼����session�д��һ����¼��ǣ�Ȼ����� request.getSession().setAttribute("user", user); chain.doFilter(request, response); } //���û��������cookie��Ч������md5�£���ֹ���뱻�˱����ƽ� private String md5(String username,String password,long expirestime){ String value=password+":"+expirestime+":"+username; //ʹ��MessageDigest��һ���ַ���md5 try { MessageDigest md=MessageDigest.getInstance("md5");// ����ʵ��ָ��ժҪ�㷨�� MessageDigest ���� byte md5[]=md.digest(value.getBytes()); //ʹ��BASE64��md5���� BASE64Encoder encoder=new BASE64Encoder(); return encoder.encode(md5); } catch (Exception e) { throw new RuntimeException(e); } } public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } }