过滤器Filter 实现

过滤器:

@Component
@WebFilter(filterName = "MyFilter",
        /**
         * 通配符(*)表示对所有的web资源进行拦截
        */
        urlPatterns = "/*"
        )
@Slf4j
public class MyFilter implements Filter {

    public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();

    @Override
    public void init(FilterConfig filterConfig){
        log.info("初始化过滤器!");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      
	  	//转型
		HttpServletRequest servletRequest = (HttpServletRequest) request;
        HttpServletResponse servletResponse = (HttpServletResponse) response;

                HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper( servletResponse);
         /**
                 // 请求url中包含/login 或 /online,继续执行
         if (request.getRequestURI().contains("/login")
                || request.getRequestURI().contains("/online") ){
            // 交给下一个过滤器或servlet处理
            chain.doFilter(servletRequest,servletResponse);
        }else {
            // 请求url不包含/login 或 /online,重定向到/online接口
            wrapper.sendRedirect("/entry/online");
        }

         */

		//获取请求URI
        log.info(servletRequest.getRequestURI());
        // 设置不要拦截的请求  数组
        String[] urls = new String[]{
                "/employee/login",
                //"/employee/layout",
                //"/backend/**",
                //"/front/**",
                //"/swagger-ui.html",
                //"/user/code",
                "/user/login"
        };
        if (match(servletRequest.getRequestURI(),urls)){
            chain.doFilter(servletRequest,servletResponse);
            return;
        }
        // 需要验证的请求
        User user = (User)servletRequest.getSession().getAttribute("user");
        Employee employee = (Employee)servletRequest.getSession().getAttribute("employee");

        // 需要验证的请求
        if (user != null){
            UserContext.setUserId(user.getId());
            chain.doFilter(servletRequest,servletResponse);
        }else if (employee !=null){
            UserContext.setUserId(employee.getId());
            chain.doFilter(servletRequest,servletResponse);
        }else {
            response.getWriter().write(JSONUtil.toJsonStr(R.error("NOTLOGIN")));

        }
    }

    // 匹配url
    public boolean match(String url,String[] urls){
        for (String item : urls) {
            if (PATH_MATCHER.match(item, url)){
                return true;
            }
        }
        return false;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值