springboot 拦截器

拦截器

bash 复制代码
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

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

/**
 * 内部微服务调用密钥校验拦截器
 */
@Component
public class InnerServiceAuthInterceptor implements HandlerInterceptor {

    // 建议配置在 application.yml 中,通过 @Value("${inner.service.secret}") 注入
    private static final String INNER_SECRET = "your-pre-shared-key-2026";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String secret = request.getHeader("X-Internal-Secret");

        // 校验 Header 中是否包含合法密钥
        if (StringUtils.hasText(secret) && INNER_SECRET.equals(secret)) {
            return true; // 校验通过,放行
        }

        // 校验失败,直接拒绝访问
        response.setStatus(HttpStatus.FORBIDDEN.value());
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write("{\"code\": 403, \"msg\": \"非法访问:缺少或无效的内部服务调用凭证\"}");
        return false;
    }
}

拦截器配置

bash 复制代码
import cn.dev33.satoken.stp.StpUtil;
import com.huayi.iepms.common.interceptor.FileSecurityInterceptor;
import com.huayi.iepms.common.config.IepmsConfig;
import com.huayi.iepms.common.constant.GenConstants;
import com.huayi.iepms.common.interceptor.InnerServiceAuthInterceptor;
import com.huayi.security.authentication.AuthorizationInterceptor;
import com.huayi.security.authentication.SecurityUserContext;
import com.huayi.web.utils.utils.CommonUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

/**
 * @Author:zrf
 * @Date:2023/09/04 15:00
 * @description:配置 Spring MVC 拦截器
 */
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Resource
    private InnerServiceAuthInterceptor innerServiceAuthInterceptor;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(GenConstants.RESOURCE_PREFIX + "/**")
                .addResourceLocations("file:" + IepmsConfig.getProfile() + "/");
    }

    /**
     * 注册权限认证拦截器
     *
     * @param registry 拦截器注册器
     **/
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(innerServiceAuthInterceptor)
                // 只拦截指定路径下的接口
                .addPathPatterns("/file/**");

        WebMvcConfigurer.super.addInterceptors(registry);
    }

}
相关推荐
CQU_JIAKE2 小时前
11.7[高体】
java·后端·spring
Csvn2 小时前
认识 Nginx
后端·nginx
apcipot_rain2 小时前
C++转Java日记(04)
java·开发语言·c++
红尘散仙2 小时前
谁说终端只能敲键盘?我用 Rust 给小说阅读器加上了鼠标
前端·后端·rust
特立独行的猫A3 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
陈随易4 小时前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
金銀銅鐵4 小时前
同一个 Hello World,Kotlin 和 Java 在字节码层面差在哪
jvm·后端·kotlin
憧憬成为java架构高手的小白5 小时前
LangGraph4j 实战(下)
java
天诰5 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
IT_陈寒7 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端