我有一个带有客户端和服务器身份验证的Spring Boot 2项目,我试图只公开/actuator/health
端点,因此它不需要任何身份验证。
我最初的WebSecurityConfigurerAdapter
是:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
private void configureWithSsl(@NotNull HttpSecurity http) throws Exception {
LOG.info("configuring access with ssl");
http
.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and().x509()
.and().userDetailsService(userDetailsService());
}
...
}
和application.yaml
server:
port: 8443
ssl:
enabled: true
key-store: 'paht/to/kestore/keystore.jks'
key-store-password: 123456
key-store-type: JKS
client-auth: need
trust-store: 'paht/to/truststore/truststore.jks'
trust-store-type: JKS
trust-store-password: 123456
protocol: TLS
enabled-protocols: TLSv1.2
我尝试过:1.将“通道”配置为端点不安全
private void configureWithSsl(HttpSecurity http) throws Exception {
http
.csrf().disable()
.requiresChannel().requestMatchers(EndpointRequest.to("health")).requiresInsecure()
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and().x509()
.and().userDetailsService(userDetailsService());
}
1.向端点添加匹配器:
private void configureWithSsl(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.to("health")).permitAll()
.anyRequest().authenticated()
.and().x509()
.and().userDetailsService(userDetailsService());
}
1.将忽略添加到端点:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().requestMatchers(EndpointRequest.to("health"));
}
我试过所有这些组合,但我仍然得到
curl -k https://localhost:8443/actuator/health
curl: (35) error:1401E412:SSL routines:CONNECT_CR_FINISHED:sslv3 alert bad certificate
curl http://localhost:8443/actuator/health
Bad Request
This combination of host and port requires TLS.
我只希望健康端点不受保护,其他执行器端点也需要保护,因此配置management.server.ssl.enabled=false
不会解决问题。。。
编辑:
根据@Arira Paul的回答,我也尝试过:
http
.csrf().disable()
.authorizeRequests()
.antMatchers( "/actuator/health/**").permitAll()
.antMatchers( "/**").authenticated()
.and().x509()
.and().userDetailsService(userDetailsService());
但我还是得到了同样的结果。
3条答案
按热度按时间anauzrmj1#
我有一个非常类似的案例,我们在端点添加了
X.509
身份验证,但希望保持Spring致动器端点身份验证免费。使用Spring 2.2.3,可以像之前一样使用ssl配置
server
,但在management
配置(用于配置致动器端点)中禁用ssl,如下所示:这个简单的组合允许我们在端口8080上使用无身份验证的情况下访问致动器端点,而在端口8443上使用ssl访问其他端点。
gywdnpxw2#
我的解决方法如下:
在实施
WebSecurityConfigurerAdapter
的SecurityConfig
中在
application.yaml
中ffscu2ro3#
据我所知,您希望使
actuator/health
url对所有人开放,所有其他url基于角色或授权。如果是这样,你可以像贝娄一样尝试