瑞吉外卖之登录篇(过滤器)

在项目中,当我们完成登录功能时,我们需要编写一个过滤器或者拦截器去防止用户在没有登录的情况下直接访问首页,以下我们用过滤器来实现该功能。

接下来我们来介绍一下过滤器:

过滤器(Filter)

概念:

Filter:过滤器,是一个接口,是JavaWeb三大组件(Servlet、Filter、Listener)之一。

作用:

过滤器Filter可以把对资源的请求拦截下来,从而实现一些通用的操作,如:权限控制、统一编码处理、敏感字符处理等。

使用方法:

实现接口       :

定义Filter的实现类,并重写doFilter方法;

【注意】实现Filter接口导包时,导的是javax.servlet.*。

配置所需拦截的路径:如

@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")

这里是通过@WebFilter标签进行路劲的设置,其中filterName是过滤器的名称,urlPatterns是所需要拦截的路劲。我这里是拦截所有请求路劲。

发行:

 对资源进行处理后,放行(doFilter())资源。

通过重写Filter中的doFilter()方法,进行响应和请求资源进行放行。例如:当check()方法为turn时方法执行filterChain.doFilter(request,response);对该资源进行放行

 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {


        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;

   if (check(urls,url)){
            log.info("本次请求{}不需要处理",url);
            //直接放行
            filterChain.doFilter(request,response);
            return;

        }

}

 实现过滤器的完整代码:

@Slf4j
//引入WebFilter标签设置过滤器名称,并设置拦截路劲
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {


    //定义路劲比较类AntPathMatcher专门对url进行比较
    AntPathMatcher antPathMatcher=new AntPathMatcher();
    //重写doFilter方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {



        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;

        //获取url
        String url=request.getRequestURI();

        //定义不需要拦截的url
        String [] urls=new String[]{
                "/employee/logout",
                "/backend/**",
                "/front/**"
        };

        //判断是否需要拦截
        if (check(urls,url)){
            log.info("本次请求{}不需要处理",url);
            //直接放行
            filterChain.doFilter(request,response);
            return;

        }
        //4、判断登录状态,如果已登录,则直接放行
        if(request.getSession().getAttribute("employee") != null){

            filterChain.doFilter(request,response);
            return;
        }
        //5、如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        return;



    }
    public boolean check(String []urls,String url) {
        for (String s : urls) {
            boolean match = antPathMatcher.match(s, url);
            if (match){
                return true;
            }

        }
        return false;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值