Java 11、Spring 启动 2.1.3、Spring 5.1.5
我有一个 Spring Boot 项目,其中某些端点由 API 密钥保护。目前使用以下代码效果很好:
@Component("securityConfig")
@ConfigurationProperties("project.security")
@EnableWebSecurity
@Order(1)
public class SecurityJavaConfig extends WebSecurityConfigurerAdapter {
private static final Logger LOG = LoggerFactory.getLogger(SecurityJavaConfig.class);
private static final String API_KEY_HEADER = "x-api-key";
private String apiKey;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
APIKeyFilter filter = new APIKeyFilter(API_KEY_HEADER);
filter.setAuthenticationManager(authentication -> {
String apiKey = (String) authentication.getPrincipal();
if (this.apiKey != null && !this.apiKey.isEmpty() && this.apiKey.equals(apiKey)) {
authentication.setAuthenticated(true);
return authentication;
} else {
throw new BadCredentialsException("Access Denied.");
}
});
httpSecurity
.antMatcher("/v1/**")
.csrf()
.disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(filter)
.authorizeRequests()
.anyRequest()
.authenticated();
}
}
这成功地需要一个包含 API 密钥的标头,但仅适用于以下端点:/v1/...
我有一个新的要求,需要证书进行身份验证。我按照以下指南在我的项目中进行了 X.509 身份验证设置:
秃顶
迪区
以代码为中心
但是,我遇到了一些问题:
证书始终是必需的,而不仅仅是/v1/*
端点
API 密钥过滤器不再起作用
一只名叫tom的猫
繁星淼淼
相关分类