實現攔截器
定義FilterService類,配置攔截器(urlPatterns = "/*"攔截所有請求,urlPatterns = "/getAllUser"攔截單個請求)
package com.example.demo.service;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/getAllUser")
public class FilterService implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("======您已進入過濾器======");
filterChain.doFilter(servletRequest,servletResponse);
}
}
在啟動類中通過ServletComponentScan注釋配置攔截的路徑
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "com.example.demo.service")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
第二種方式,攔截登錄token是否失效

目錄結構
LoginTokenInterceptor
package com.example.demo.utils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
public class LoginTokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("請求攔截");
// 獲取請求中的token
String token = request.getHeader("Authorization");
String username = request.getHeader("Username");
// 驗證token是否失效,這里的邏輯需要根據實際情況實現,例如調用認證服務
boolean isTokenValid = validateToken(token, username);
if (!isTokenValid) {
// token失效,返回錯誤信息或者重定向到登錄頁面
// response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 401
CodeSataus.setValue(401);
return true;
}
CodeSataus.setValue(200);
// token有效,繼續(xù)執(zhí)行請求
return true;
}
private boolean validateToken(String token, String username) {
// 實現token驗證邏輯
// 返回true表示token有效,返回false表示token失效
return JwtTokenUtil.validateToken(token, username); // 示例:假設總是返回true
}
}
WebConfig
package com.example.demo.utils;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginTokenInterceptor())
.addPathPatterns("/**").
excludePathPatterns("/user/login/**");
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
//將 allowedOrigins 替換為 allowedOriginPatterns
//.allowedOrigins("*")
.allowedOriginPatterns("*")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
CodeStatus
package com.example.demo.utils;
import java.util.Arrays;
public class CodeSataus {
public static int value = 200;
public static int[] white = { 401 };
public static void setValue (int data) {
value = data;
}
public static boolean whiteValue () {
return Arrays.binarySearch(white, value) >= 0;
}
}