拦截器
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);
}
}