java初學者-攔截器之類的方法

實現攔截器

定義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;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容