【SpingBoot拦截器】实现两个接口,配置拦截路径

SpingBoot拦截器

【SpringWeb框架中的拦截器作用类似于过滤器,都可以对一个请求进行拦截处理。】

我们可以用拦截器做很多事情:

  • 日志记录:记录请求信息的日志,以便进行信息监控、信息统计等;
  • 权限检查:如登录校验,在处理器处理之前先判断是否已经登录;
  • 性能监控:通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间。
  • 通用行为:读取 Cookie 得到用户信息并将用户对象放入请求,从而方便后续流程使用。还有如提取 Locale、Theme 信息等,只要是多个处理器都需要的都可以用拦截器来实现。

拦截器与过滤器的区别:

过滤器:

  • servlet规范中的一部分,任何java web程序都可以使用。
  • 在url-pattern中配置之后,可以对所要访问的资源进行拦截。

拦截器:

  • 拦截器在SpringMvc框架自己的,只有使用了SpringMvc框架工程才能使用。
  • 拦截器只会拦截访问控制器的方法,如果访问的是js,css,image…是不会进行拦截的。

1.HandlerInterceptor接口

SpringBoot中拦截器的接口名称是HandlerInterceptor,接口里有三个方法:

方法说明:

  • preHandle:在业务处理器Controller处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
  • postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView
  • afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
public interface HandlerInterceptor {
    /**
     * preHandle是请求执行前执行的
     */
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }
	/**
     * postHandler是请求结束,在DispatcherServlet 渲染视图之前执行的,
     * 当preHandle返回true才会执行
     */
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }
	 /**
     * afterCompletion是视图渲染完成后才执行
     */
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

2.WebMvcConfigurer接口

WebMvcConfigurer接口配置拦截路径

三种方式:

  1. 继承WebMvcConfigurerAdapter spring5.0 以弃用,不推荐
  2. 实现WebMvcConfigurer 推荐
  3. 继承WebMvcConfigurationSupport 会导致springboot自动配置失效
public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(拦截xxx)
                .addPathPatterns("/**")
                .excludePathPatterns("/user/login")
                .excludePathPatterns("/user/logout");
    }
  • addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
  • addPathPatterns:用于设置拦截器的过滤路径规则;addPathPatterns("/**")对所有请求都拦截
  • excludePathPatterns:用于设置不需要拦截的过滤规则

3.示例:

https://www.jb51.net/article/198236.htm

此处做一个做一个简单的拦截范例:
▶创建拦截器的:实现HandlerInterceptor接口

@Component
public class LoginInterceptor implements HandlerInterceptor {
	//这里只用了两个方法
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行preHandle方法");
        return true;
    }
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("执行afterCompletion方法");
    }
}

▶配置拦截:implements WebMvcConfigurer

/**
 * 拦截器配置类
 */
@Configuration
public class WebJavaBeanConfiguration implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/user/login")
                .excludePathPatterns("/user/logout");
    }

}

▶Controller类:登录和安全退出时,不拦截,其他请求拦截

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping ("/findUserById")
    public String findUserById() {
        return "根据ID获取单个对象信息";
    }

    @PostMapping("/login")
    public String login(String uname,String pwd) {
        System.out.println("名字==="+uname);
        System.out.println("密码==="+pwd);
        return "登录成功";
    }
}

执行测试:
localhost:8080/user/findUserById,执行了拦截器的方法,说明拦截成功
localhost:8080/user/login?uname=123&pwd=456,正常运行,说明拦截配置成功

在这里插入图片描述


ApiPost7的简单使用

关于测试接口的软件ApiPost7,刚开始下载可能不会使用,出两个图,看下接口的测试,其他功能自己学习。

创建接口:
在这里插入图片描述

配置一些公共的接口前缀和环境:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱尔斯Jules

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值