在我的Spring Boot项目中,我试图授予具有特定IP地址的多个管理员用户访问权限。
是否可以将一个角色映射到多个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循环导致以下配置:
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(“USER”).antMatchers(“/admin/”) .hasRole(“ADMIN”)
注意匹配器是按顺序考虑的。因此,以下内容无效,因为第一个匹配器匹配每个请求,并且永远不会到达第二个映射:
http.authorizeRequests().antMatchers(“/”).hasRole(“USER”).antMatchers(“/admin/”) .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'))";