我正在建立一个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
并且忽略了安全性的这条路径,但使用非标准路径加上摆弄安全配置的路径而不进行硬编码似乎并不理想,所以我想找到是否有一个标准的方法。
答案 0 :(得分:1)
答案 1 :(得分:0)
您始终可以添加请求匹配器,并跳过管理端口的安全检查。 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的启发。