SpringBoot-过滤器与拦截器

SpringBoot里面的过滤器和拦截器都是自定义的,都是自己去手写他们的配置类。

先写一个常量类 用来放session的名字,

public class SpringTools {
    public final static String LOG_SESSION = "logsession";
}

过滤器需要实现Filter接口 重写他的方法:

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //把他们转成带协议的
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;
        HttpSession session = req.getSession();
        //判断Session是否为空
        if(session.getAttribute(SpringTools.LOG_SESSION) == null){
            res.sendRedirect("/stu/dolog");
        }else{
            chain.doFilter(req,res);
        }
    }
    @Override
    public void destroy() {

    }
}

注入Bean

@Configuration
public class LoginFilterConfig {
    @Bean
    public FilterRegistrationBean registrationBean(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new LoginFilter());
        //给你这个过滤器取个名字
        filterRegistrationBean.setName("LoginFilter");
        //你要过滤的地址
        filterRegistrationBean.addUrlPatterns("/stu/goShow");
        //设置当前过滤器在过滤器中的优先级,默认值是int最大值
        filterRegistrationBean.setOrder(2);
        return filterRegistrationBean;
    }
}

在这一步一个基本的过滤器就配好了

拦截器需要继承HandlerInterceptor接口 :

public class MyLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        //判断有没有session 如果没有就拦截掉我那边设置的/**
        if(session.getAttribute(SpringTools.LOG_SESSION) == null){
            response.sendRedirect("/stu/dolog");
            return false;
        }
        return true;
    }
}

再注入Bean:

//拦截器
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // addPathPatterns代表着拦截所有路径  excludePathPatterns代表不拦截哪些路径
        registry.addInterceptor(new MyLoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/stu/dolog","/stu/log");
    }
}

这样一个基本的拦截页面的 过滤器和拦截器就完事了,需要注意的一点是 ,如果他们拦截了同样的请求 ,过滤器会先执行,但他们不会冲突。不会导致报错这些。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值