filter实现自动登陆demo

案例练习:自动登陆
需求:点开网页时自动登陆

一:

//粗略版代码
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//1.将请求和响应强转
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
//2.获取指定的cookie
        Cookie c = GetCookie.getCookieByName(request.getCookies(),"autologin");
          //能获取指定的cookie 就完成登陆
        if(c!=null){
            System.out.println("1自动登陆!!");
            String  name = c.getValue().split("-")[0];
            String password = c.getValue().split("-")[1];
            User user=null;
            try {
                 user = new LoginService().LoginByName_Pword(name,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if(user!=null){
                //保存到session 中
                request.getSession().setAttribute("user",user);
                //给出登陆成功的提示
                //response.sendRedirect("/success1.jsp"); 跳转页面在当前filter 过滤的范围内,会变成死循环
            }
        }
        System.out.println("1 filter 执行");
//3.放行

        filterChain.doFilter(request,response);
    }

执行细节分析

粗略版:filter  的配置为/*   过滤所有的访问
初次登录并且访问,并且选择自动登陆

在这里插入图片描述

执行后的输出:
filter执行
回写cookie
登录成功

自动登录
filter执行
分析执行细节:(过滤所有的请求)
1.访问login  :被过滤,并没有获取指定的cookie,放行
2.在servlet 中完成登录,判断勾选自动登陆,回写Cookie
3.在servlet 中页面跳转到提示登录页面,被过滤,到filter 中执行。最后放行到提示登录成功的页面(这个请求为jsp 页面,并不是servlet 所以最后放行的页面是jsp 登录成功的提示页面)


二:改良版
1.针对过滤的请求的范围做出判断和修改,总不能是个请求都被过滤,然后在后台都实现了自动登录
2.当登陆第二个用户时,无法正常登录(一般登录,登录的是上一个登录的用户,只有记住密码才能完成登陆)

1.自动登陆是需要一次,就是没有登录时--session中没有user 时
2.在过滤的时候不需要过滤所有访问,不是所有请求都需要自动登陆(访问登录或者是注册页面的时候不需要纳入过滤范围-不需要自动登陆)

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/88082242