java - 403访问禁止错误-当url具有动态路径参数时spring security

标签 java spring authentication spring-security authorization

我有一个名为 USER 的资源用于我的休息服务。 以下是来自该资源的一些 api。

/api/users/{userId}/order/{orderId}
/api/users/{userId}/favoriteStores

我希望第一个 URL 受到保护,而第二个 URL 不需要安全性。(给出一个示例 api url)。

我配置的安全配置如下

  <security:http pattern="/rest/users/**" entry-point-ref="restAuthenticationEntryPoint"
        use-expressions="true" auto-config="false" create-session="stateless">
        <security:custom-filter ref="authenticationTokenProcessingFilter"
            position="PRE_AUTH_FILTER" />
        <security:intercept-url pattern="/rest/users/{userId}/order/**"
            access="hasRole('ROLE_CUSTOMER')" />
        <security:logout />
    </security:http>

但这也会拦截第二个网址(即/api/users/{userId}/favoriteStores)

所以,我将配置更改为

<security:http pattern="/rest/users/{userId}/order/**" entry-point-ref="restAuthenticationEntryPoint"
            use-expressions="true" auto-config="false" create-session="stateless">
            <security:custom-filter ref="authenticationTokenProcessingFilter"
                position="PRE_AUTH_FILTER" />
            <security:intercept-url pattern="/rest/users/{userId}/order/**"
                access="hasRole('ROLE_CUSTOMER')" />
            <security:logout />
        </security:http>

现在显示禁止错误。

我应该如何配置安全拦截网址?

最佳答案

在 Spring Security 中,如果您不想拦截 URL 模式,那么您必须提供访问值 PermitAll。另外,URL 模式必须与您想要的完全匹配。就像您的示例中一样,如果您想允许 url 模式 rest/users/{userId}/favoriteStores 那么您必须添加如下拦截模式:

<security:intercept-url pattern="/rest/users/*/favoriteStores/**"
                access="permitAll" />

更多信息可以通过spring链接 for spring Expression-Based Access Control

关于java - 403访问禁止错误-当url具有动态路径参数时spring security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854811/

相关文章:

java - 阿拉伯语文本显示为 ???在安卓中

java - 如何将参数传递给验证Spring Webflow的方法?

java - 将 join 放在主线程上意外行为

javascript - 使用javascript注销Github

Java JProgressBar 使用图像

java - 如何为单个 Spring Boot 应用程序创建两个日志文件

java - 无法读取 Artifact 描述符 Spring Boot

spring - 在 JUnit 测试用例上获取 LazyInitializationException

javascript - (显然)成功登录后 Meteor.user 为 null

java - SOAP 客户端基本身份验证 : HTTP response '401: Unauthorized'