【问题标题】:403 access forbidden error - spring security when the url has dynamic path param403 访问禁止错误 - url 具有动态路径参数时的弹簧安全性
【发布时间】:2015-10-29 13:05:44
【问题描述】:

我有一个名为 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>

但这也拦截了第二个 url(即 /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>

现在它显示禁止错误。

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

【问题讨论】:

    标签: java spring authentication spring-security authorization


    【解决方案1】:

    在 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

    【讨论】:

    • @user5118993 如果答案有效,您应该接受。
    • @DavidA 我还没有足够的声誉来支持答案
    • 您不必投票,只需点击投票下方的“检查”即可接受它作为答案。
    • 嗯,好的。知道了。完毕 ! @大卫A
    【解决方案2】:

    如果你根本不想拦截 url,你可以简单地做

    <http pattern="/rest/users/*/favoriteStores/**" security="none"/>
    

    【讨论】:

    • 我使用了 security="none" 但它抛出了一个错误,说无法解析这个标签。我正在使用 spring 4 和 spring-security 4
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2013-04-12
    • 2017-12-02
    • 2018-12-12
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多