【问题标题】:Spring Security: allow unauthenticated access to secured resourceSpring Security:允许未经身份验证的访问安全资源
【发布时间】:2015-07-01 19:38:22
【问题描述】:

如何配置 Spring Security 以使未经身份验证和经过身份验证的用户都可以访问某些资源?如果用户通过身份验证,则必须能够在资源处理方法中获取身份验证上下文。

不得使用匿名身份验证,因为我们必须区分其他资源的未经身份验证(401 Unauthorized(不幸的 HTTP 命名))和未经授权(403 Forbidden)。

如果我们将资源添加到web.ignoring(),那么即使经过身份验证的用户也无法使用身份验证上下文。

如果资源不在web.ignoring() 中,那么对于未经身份验证的用户,Spring 返回 HTTP 401。

【问题讨论】:

  • 这个问题的问题是内部实现造成的。

标签: java spring spring-mvc authentication spring-security


【解决方案1】:

在您的 spring 安全配置文件中,您应该有类似或等效的内容...

<http use-expressions="true">
<intercept-url pattern="/app/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER','ROLE_CUST_ADMIN')" />
<intercept-url pattern="/app2/**" access="hasRole('ROLE_ADMIN')" />
</http>

如果你添加 permitAll 它将允许用户查看资源...

<http use-expressions="true">
<intercept-url pattern="/app/**" access="permitAll" />
</http>

【讨论】:

    【解决方案2】:

    我可能已经发现了问题,并且可能会进行匿名身份验证。问题似乎出在我们自定义的 ExceptionTranslationFilter 上,它响应 403 而不是匿名的 401。抱歉问题无效。

    【讨论】:

    • 您可能会考虑删除此问题,因为它无效且没有答案,永远保留为未回答的问题。
    • 我无法删除它,所以我已将其标记为已关闭。
    猜你喜欢
    • 2019-08-19
    • 2023-04-09
    • 2017-05-10
    • 2016-11-11
    • 2015-01-08
    • 1970-01-01
    • 2018-03-04
    • 2014-12-11
    • 2017-08-14
    相关资源
    最近更新 更多