zoukankan      html  css  js  c++  java
  • 12.30天自动登陆

    想要实现自动登录,需要通过Cookie保存用户名密码在客户端,然后通过过滤器拦截请求,对于未登录而带有自动登录cookie且自动登录cookie中保存的用户名密码都正确则在放行资源之前做自动登录操作。

    package cn.bingou.filter;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    
    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.HttpSession;
    
    import cn.bingou.domain.User;
    import cn.bingou.exception.MsgException;
    import cn.bingou.factory.BaseFactory;
    import cn.bingou.service.UserService;
    
    public class AutoLoginFilter implements Filter {
    
        private String encode=null;
        
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            
            HttpServletRequest req=(HttpServletRequest) request;
            // 1.用户没有登陆
            HttpSession session=req.getSession(false);
            if(session==null || session.getAttribute("user")==null){
                Cookie[] cs=req.getCookies();
                Cookie findC=null;
                if(cs!=null){
                    for(Cookie c:cs){
                        if("autologin".equals(c.getName())){
                            findC=c;
                            break;
                        }
                    }
                }
                // 2.用户携带了自动登录的Cookie
                if(findC!=null){
                    // 3.自动登陆Cookie中保存的用户名和密码正确
                    String value=findC.getValue(); // username#password
                    String username=URLDecoder.decode(value.split("#")[0], encode);
                    String password=value.split("#")[1];
                    UserService service=BaseFactory.getFactory().getInstance(UserService.class);
                    try {
                        User user=service.login(username, password);
                        // 以上3点都符合,再进行自动登陆 -> 将用户的信息存入session
                        if(user!=null){
                            // 实现自动登陆 -> session中现在已经有用户的登陆状态
                            // session.setAttribute("user",user); // 空指针
                            req.getSession().setAttribute("user", user);
                        }
                    } catch (MsgException e) {
                        e.printStackTrace();
                    }
                }
            }
            // 放行请求
            chain.doFilter(request, response);
        }
        
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.encode=filterConfig.getServletContext().getInitParameter("encode");
    
        }
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
    
        }
    }
      <!-- 配置过滤器 -->
      <filter>
          <filter-name>AutoLoginFilter</filter-name>
          <filter-class>cn.bingou.filter.AutoLoginFilter</filter-class>
      </filter>
      
      <!-- 配置过滤器拦截的url -->
      <filter-mapping>
          <filter-name>AutoLoginFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
  • 相关阅读:
    收集起来先
    asp .net 页面回车触发button 按钮事件
    关于SQL 数据库表中的聚集索引和非聚集索引等
    WinForm换肤操作(用IrisSkin2.dll)
    生成Word文档的相关操作
    API自动化测试测试数据集
    API文档实践
    使用eolinker对API测试的响应结果进行断言
    API自动化定时测试
    接口测试之对数据进行RSA加解密
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9813152.html
Copyright © 2011-2022 走看看