Spring Security配置中的单角色多个IP地址

在我的Spring Boot项目中,我试图授予具有特定IP地址的多个管理员用户访问权限。

这是我的安全配置中的无效代码。(为简单起见,我提供了硬编码的角色名称和IP地址)

@SuppressWarnings("ALL")

@Configuration

@EnableWebSecurity

public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

List<String> ipAddresses = new ArrayList<>();

ipAddresses.add("127.0.0.1");

ipAddresses.add("192.168.1.0/24");

ipAddresses.add("0:0:0:0:0:0:0:1");

for (String ip : ipAddresses) {

http.authorizeRequests().

antMatchers("/admin" + "/**")

.access("hasRole('admin') and hasIpAddress('" + ip + "')");

}

}

//some other configurations

}

我的请求的网址:http:// localhost:9595 / admin / checkappeals /

211

回答:

您的for循环导致以下配置:

@SuppressWarnings("ALL")

@Configuration

@EnableWebSecurity

public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

http

.authorizeRequests()

.antMatchers("/admin/**").access("hasRole('admin') and hasIpAddress('127.0.0.1')")

.antMatchers("/admin/**").access("hasRole('admin') and hasIpAddress('192.168.1.0/24')")

.antMatchers("/admin/**").access("hasRole('admin') and hasIpAddress('0:0:0:0:0:0:0:1')");

}

//some other configurations

}

所以对于URL:

http://localhost:9595/admin/checkappeals/211

仅考虑第一个匹配器,请参见HttpSecurity#authorizeRequests:

注意匹配器是按顺序考虑的。因此,以下内容无效,因为第一个匹配器匹配每个请求,并且永远不会到达第二个映射:

http.authorizeRequests().antMatchers(“/”)

.hasRole(“ADMIN”)

您必须构建类似:

http

.authorizeRequests()

.antMatchers("/admin/**").acces("hasRole('admin') and (hasIpAddress('127.0.0.1') or hasIpAddress('192.168.1.0/24') or hasIpAddress('0:0:0:0:0:0:0:1'))";

以上是 Spring Security配置中的单角色多个IP地址 的全部内容, 来源链接: utcz.com/qa/425969.html

回到顶部