过滤器JavaWeb:Filter与拦截器Spring:Intercepter

17 篇文章 0 订阅
2 篇文章 0 订阅

过滤器与拦截器若同时存在,先执行过滤器的放行前,再执行整个拦截器,最后再执行过滤器的放行后
过滤器会拦截所有资源(包括静态资源),拦截器只会拦截Spring环境的资源

Filter的使用

1、创建一个类implements Fliter接口中的doFilter方法(init和destroy方法默认实现)
2、在该类上添加@WebFilter注解 (urlPatterns = “/配置拦截路径”)
3、在spring boot启动类上加上@ServletComponentScan注解扫描Servlet组件
4、doFilter方法中使用FilterChain的doFilter方法可以放行拦截请求,因此放行之前的操作写在FilterChain的doFilter方法之前,放行之后访问到对应资源后,还会回到doFilter方法执行放行后的代码,因此放行后的操作写在FilterChain的doFilter方法之后
多个filter的执行顺序是按照filter类的类名Abc…

在这里插入图片描述

拦截器的定义与注册
定义:
1、实现HandlerInterceptor接口并加上注解@Component

@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
    @Override
    //目标资源方法运行前执行,返回true:放行,返回false:不放行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return false;
    }

    @Override
    //目标资源方法运行后执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    //视图渲染完毕后执行,最后运行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    }
}

注册:
1、实现WebMvcConfigurer接口并重写addInterceptors()方法
2、声明为一个配置类@Configuration
3、将定义的拦截器注册

@Configuration//声明为一个配置类
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private LoginCheckInterceptor loginCheckInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginCheckInterceptor)
                .addPathPatterns("/**")//拦截所有资源
                .excludePathPatterns("/login");//不需要拦截的资源
    }
}

在这里插入图片描述

设置拦截器的执行顺序

使用order()自定义顺序
0为最高,默认都是0,根据注册顺序来执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值