Spring Security-将IP范围列入白名单

我已经看过很多资源和stackoverflow问题,它们为使用.xml文件提供了答案:

  • http://websystique.com/spring-security/spring-security-4-method-security-using-preauthorize-postauthorize-secured-el/

  • http://docs.spring.io/spring-security/site/docs/3.0.x/reference/appendix-namespace.html#nsa-gms

我只想知道是否可以使用Spring Security在不使用XML配置的情况下将IP地址范围列入白名单?

以下是控制器中的一种简单方法:

@RequestMapping(value = "/makeit", method = RequestMethod.GET)

@ResponseBody

//@PreAuthorize("hasIpAddress('192.168.0.0/16')")

public String requestData() {

return "youve made it";

}

我已经为security配置创建了一个单独的类,但是它没有太多的东西,我只是为EnableGlobalMethodSecurity注释创建了它-

这样我就可以使用@PreAuthorize注释

@Configuration

@EnableWebSecurity

@EnableGlobalMethodSecurity(prePostEnabled = true)

public class SpringConfiguration extends WebSecurityConfigurerAdapter {

@Override

public void configure(HttpSecurity http) throws Exception {

http.csrf().disable();

http

.authorizeRequests()

.anyRequest().access("hasIpAddress('0.0.0.0/0')");

/*http

.authorizeRequests()

.anyRequest().hasIpAddress("0.0.0.0/0");*/

/*http

.authorizeRequests()

.antMatchers("/**").hasIpAddress("0.0.0.0/0");*/

/*http

.authorizeRequests()

.antMatchers("/**").access("hasIpAddress('0.0.0.0/0')");*/

/*http

.authorizeRequests()

.anyRequest().access("hasIpAddress('0.0.0.0/0')");*/

}

}

但是,当我尝试时,它的响应是(通过POSTMAN):

{

"timestamp": 1486743507520,

"status": 401,

"error": "Unauthorized",

"message": "Full authentication is required to access this resource",

"path": "/makeit"

}

其他事实:

我的IP地址在此范围内。我正在使用Spring版本1.3.1(我相信Spring Security是4.0.3)。

回答:

因此,借助@Dur,我们能够解决此问题。问题与Spring Boot无关(上面的所有方法都可以正常工作),但问题在于,当用户本地访问Spring

App(本地主机:8080)时,本地主机使用IPv6地址,并且上述代码允许访问IPv4地址。

您需要通过将IPv4地址更改为IPv6(或Tomcat默认设置为)来更改SpringSecurityConfig文件,或者可以更改访问应用程序的方式(转到127.0.0.1:8080)。

注意-这仅用于本地测试。您需要测试并获取将访问您的应用程序的用户/服务的IP地址。

简而言之,您可以使用上述代码在不使用AuthenticationManagerBuilder的情况下将IP范围列入白名单。

以上是 Spring Security-将IP范围列入白名单 的全部内容, 来源链接: utcz.com/qa/415342.html

回到顶部