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);
    }

}
相关推荐
lzfshub1 小时前
Open-DIS Python发送DIS实体状态PDU:实现坦克炮塔与主炮部件参数
java·网络·python·dis
William Dawson1 小时前
Spring Boot 接入华为 MRS Redis 集群(密码认证)全流程实战
spring boot·redis·华为
步行cgn1 小时前
Spring Boot 绑定嵌套 Bean 详解
java·spring boot·后端
Looooking1 小时前
Python 之 Flask 的全局变量 g
后端·python·flask
AIGC小尼2 小时前
穿山甲 + 腾讯短剧短视频聚合广告平台|Android+SpringBoot+Vue+Docker 完整部署指南
android·vue.js·spring boot·聚合广告·广告平台·穿山甲广告·腾讯广告
William Dawson2 小时前
Spring Boot 接入华为 MRS ClickHouse(JDBC + 安全认证 + 负载均衡)实战
spring boot·redis·华为
摇滚侠10 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端
phltxy10 小时前
C语言操作符详解
java·c语言·算法
步行cgn12 小时前
@Configuration 详解:Spring 配置类的核心注解
java·后端·spring