gpt4 book ai didi

java - 如何禁用 Spring Boot 应用程序管理端口的安全性?

转载 作者:行者123 更新时间:2023-11-30 10:52:46 26 4
gpt4 key购买 nike

我正在设置一个 Spring Boot 1.3 安全应用程序,但有一个公众无法访问的管理端口,因此我不需要在此端口上进行任何安全保护。

这就是我想要实现的目标:

server.port = 8080     # -> secure
management.port = 8081 # -> unsecure

但是一旦我添加 WebSecurityConfigurerAdapter,它就会自动对两个端口生效。如果管理端口不同,设置 management.security.enabled=false 无效,这是一个错误吗?我如何才能仅禁用管理端口的安全性?

我的简单安全配置:

@Configuration
@EnableWebSecurity
static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
}

我知道一个可能的解决方法是设置自定义上下文路径,例如。 /manage 并忽略来自安全的这条路径,但是使用非标准路径加上摆弄以在不对其进行硬编码的情况下将路径解析为安全配置似乎并不理想,所以我想找出是否有标准方法。

最佳答案

您始终可以添加请求匹配器并跳过管理端口的安全检查。 Spring Boot 2 的解决方法如下。这也可能适用于较旧的 Spring Boot 版本。请试试看。

public class AppSecurityConfig extends WebSecurityConfigurerAdapter {

// this is the port for management endpoints
@Value("${management.server.port}")
private int managementPort;

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers(checkPort(managementPort)).permitAll()
.anyRequest().authenticated();

}

/**
* This method verifies whether a request port is equal to the provided method parameter
*
* @param port Port that needs to be checked with the incoming request port
* @return Returns a request matcher object with port comparison
*/
private RequestMatcher checkPort(final int port) {
return (HttpServletRequest request) -> port == request.getLocalPort();
}
}

灵感来自 this answer .

关于java - 如何禁用 Spring Boot 应用程序管理端口的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com