A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

相信大家如果做过用户的登录和注册的案例一定知道,对于一些不合法的用户如果知道你的内部完成的情况,就可以直接访问的你的内部完成而省略用户登录的过程,这个过程中存在一定的隐患,对于信息的安全和用户的体验,因此过滤器很好的解决了这部分的问题,下面展示一部分实现的代码,对于用户的登录,注册界面和相关资源给与了授权,其他资源在未登录的情况下禁止访问如下:
/*
* 过滤用户信息,让用户登录后再访问
* */
//@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);
            }
        }
    }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马