springboot中的过滤器、拦截器

参考博客: https://blog.csdn.net/yudiandemingzi/article/details/80399971

过滤器和拦截器的区别:
1、过滤器只在servlet前后起作用
2、拦截器使用的是aop思想,动态代理等方式实现
3、过滤器能做的事拦截器都能做,二拦截器做的事过滤器不一定做的了。

一、过滤器

1、在启动类上加上

@ServletComponentScan // 扫描servlet

2、创建自定义过滤器

package com.msb.filterandlistrer.filtertest;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/** 过滤器测试
 * @author LiuShanshan
 * @version V1.0
 * @Description
 */
@Order(1)   // order里面的值越低,越先执行
@WebFilter(urlPatterns = "/api/filter/*", filterName = "FilterDemo1")
public class FilterDemo1 implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 容器加载的时候执行
        System.out.println("拦截器进入========================");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 请求被拦截时请求
        System.out.println("请求拦截中=====================================");

    }

    @Override
    public void destroy() {
        // 容器销毁的时候执行
        System.out.println("拦截器销毁=======================");
    }
}

3、controller 调用接口,会被servlet中filter中doFilter拦截

二、拦截器(可用于登录、日志、通用处理)

参考博客:https://www.cnblogs.com/zktww/p/11550891.html

1、拦截器

package com.msb.filterandlistrer.interceptor;

import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** 拦截器处理demo1
 * @author LiuShanshan
 * @version V1.0
 * @Description
 */
public class InterceptorDemo1 implements HandlerInterceptor{

    // 处理controller请求之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器,调用请求之前执行=======================");
        return false;
    }

    // 处理controller之后,生成视图之前
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器,生成视图之前执行--------------------------");
    }

    // 处理controller之后
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("拦截器,调用接口结束执行@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    }
}

2、写拦截器的配置类

package com.msb.filterandlistrer.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/** 拦截器配置类
 * @author LiuShanshan
 * @version V1.0
 * @Description
 */
@Configuration
public class LoginConfig implements WebMvcConfigurer{
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器
        InterceptorRegistration registration = registry.addInterceptor(new InterceptorDemo1());
        // 所有路径被拦截(被拦截,就会经过拦截器里面的方法)
        registration.addPathPatterns("/**");
        System.out.println("========================拦截器启动=======================");
        // 添加白名单(不会经过拦截器)
        registration.excludePathPatterns("你的登陆路径",            //登录
                "/**/*.html",            //html静态资源
                "/**/*.js",              //js静态资源
                "/**/*.css",             //css静态资源
                "/**/*.woff",
                "/**/*.ttf");
    }
}

3、这样只要你使用web请求,都会进过拦截器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值