我想允许匿名访问(仅限于特定IP地址子网)。
URL为:
http://10.102.34.98:880/auth/tokens/revoke/blabla,其中auth是Web应用程序的上下文根。
正在访问的IP地址是10.102.34.98 访问IP地址的子网掩码为255.255.255.0 Trusted.client.subnet属性设置为10.102.34.0/24
匿名访问可以正常工作:
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.requestMatchers()
.antMatchers("/login", "/oauth/authorize","/tokens/revoke/**")
.and()
.authorizeRequests()
.antMatchers("/tokens/revoke/**").permitAll()
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll();
}
但是一旦我将permitAll()
替换为hasIpAddress()
,我就会重定向到我的登录页面。
如何允许受IP地址子网限制的匿名访问?
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.requestMatchers()
.antMatchers("/login", "/oauth/authorize","/tokens/revoke/**")
.and()
.authorizeRequests()
.antMatchers("/tokens/revoke/**").hasIpAddress(environment.getProperty("trusted.client.subnet"))
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll();
}
更新1:
最后是强制显示登录表单的代码。我希望它不会像过去那样通过IP地址白名单。
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll();
答案 0 :(得分:1)
您应该通过启用Spring Security日志来获取更多信息:
-Dlogging.level.org.springframework.security=TRACE
最有可能发生的是,一个hasIpAddress
匹配,角色ROLE_ANONYMOUS
被赋予了发出请求的用户。除非在安全配置中启用了anonymous()
,否则不会启用该角色。
看到其他问题: