日拱一卒:如何在 Springboot 中使用攔截器?

攔截器 Interceptor,是 SpringMVC 中的核心內容,利用 spring 的 AOP(Aspect Oriented Programming, 面向切面編程)特性,可以很方便的對用戶的業務代碼進行橫向抽取,根據具體業務需求對應用功能進行增強。
在 SpringBoot 中使用 Interceptor,同時採用全註解開發,涉及到以下接口和類:

下面通過一個案例來實現自定義攔截器
攔截 / user / 開頭的請求,不攔截 / usr/login 請求

  1. 定義攔截器 ========
1234567891011121314package cn.eis220.web;

import org.springframework.web.servlet.HandlerInterceptor;

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

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("執行了logininterceptor的preHandle方法");
        return true;
    }
}
  1. 使用 JavaConfig 註冊攔截器 ======================

java 配置類相當於 xml 配置文件
xml 中通過引入 interceptor 標籤來進行配置,java 配置類通過實現 WebMvcController 進行配置;
xml 中通過修改標籤的屬性和值來個性化配置,java 配置類通過實現 WebMvcController 的方法進行個性化配置

123456789101112131415161718package cn.eis220.config;

import cn.eis220.web.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyAppCofnig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LoginInterceptor loginInterceptor = new LoginInterceptor();

        String[] path = {"/user/**"};
        String[] excludePath = {"/user/login"};

	registry.addInterceptor(loginInterceptor).addPathPatterns(path).
excludePathPatterns(excludePath);
    }
}
  1. 定義控制器,測試攔截器 ==============
123456789101112131415161718192021package cn.eis220.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BootController {
    @RequestMapping("/user/account")
    @ResponseBody
    public String userAccount(){
        return "/user/account";
    }

    @RequestMapping("/user/login")
    @ResponseBody
    public String userLogin(){
        return "/user/login";
    }
}
  1. 總結 =====

步驟:

來源:

https://www.cnblogs.com/arminker/p/15806725.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/2b9Syms8yAyDv2vbD1Xvnw