黑马程序员技术交流社区

标题: 【成都校区】使用过滤器完成用户指定路径的登录 [打印本页]

作者: ybs16602837817    时间: 2019-1-10 14:17
标题: 【成都校区】使用过滤器完成用户指定路径的登录
相信大家如果做过用户的登录和注册的案例一定知道,对于一些不合法的用户如果知道你的内部完成的情况,就可以直接访问的你的内部完成而省略用户登录的过程,这个过程中存在一定的隐患,对于信息的安全和用户的体验,因此过滤器很好的解决了这部分的问题,下面展示一部分实现的代码,对于用户的登录,注册界面和相关资源给与了授权,其他资源在未登录的情况下禁止访问如下:
/*
* 过滤用户信息,让用户登录后再访问
* */
//@WebFilter("/*")
public class LoginFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        String uri = request.getRequestURI();
        //判断是否包含登录,注册相关的信息和css,js,html
        if(uri.contains("user/login") || uri.contains("user/regist") ||
                uri.contains("/css/") || uri.contains("/js/") ||
                uri.contains("/fonts/") || uri.contains("header.html") ||
                uri.contains("/images/") || uri.contains("/img/") ||
                uri.contains("footer.html") || uri.contains("register_ok.html")||
                uri.contains("/checkCode")){
            //放行这些界面
            chain.doFilter(request,resp);
        }else {
            //判断用户是否登录,从session中拿到user信息
            User user = (User) request.getSession().getAttribute("user");
            if (user != null){
                //允许访问资源
                chain.doFilter(request,resp);
            }else {
                //跳转到登录页面
                request.setAttribute("login_error","请先登录再访问");
                request.getRequestDispatcher("/login.html").forward(request,resp);
            }
        }
    }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2