如何仅在Spring Security中允许匿名用户从localhost访问?

时间:2019-06-14 10:26:41

标签: java spring spring-security

我只允许来自本地主机的特定URL模式请求。到目前为止,我已经尝试过:

<sec:intercept-url pattern="/blabla/**" access="hasIpAddress('127.0.0.1')" />

但是这不起作用,并且我在日志输出中得到以下语句:

Access is denied (user is anonymous); redirecting to authentication entry point

所以我的问题是,如何只允许来自本地主机的匿名用户访问?

3 个答案:

答案 0 :(得分:2)

看看HttpSecurity::anonymous方法如何启用和提供匿名认证的AnonymousConfigurer<H extends HttpSecurityBuilder<H>>配置。

在您的Spring Security配置类中,应该有一个覆盖方法:

@Override
public void configure(HttpSecurity http) throws Exception {
    http.and()
        .anonymous()...          // enables and configures the anonymous access
    .and()
        .authorizeRequests()...

答案 1 :(得分:2)

  

是否可以在基于XML的配置中表达此and()关系?

根据下面https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html处的文档,应该可以使用。

在这里,我们定义了应用程序的“ blabla”区域(由URL模式定义)仅应用于IP地址与127.0.0.1匹配的匿名用户。

    <sec:intercept-url pattern="/blabla/**"
        access="isAnonymous() and hasIpAddress('127.0.0.1')"/>

答案 2 :(得分:1)

我最终使用了以下内容:

http.authorizeRequests()
// restrict all requests unless coming from localhost IP4 or IP6
.antMatchers("/**").access("hasIpAddress(\"127.0.0.1\") or hasIpAddress(\"::1\")")

我只尝试使用hasIpAddress("127.0.0.1")进行操作,如果我将该IP放在浏览器的url中可以正常工作,但是它不能与localhost作为别名请求它一起使用。