403 访问禁止错误 - 当 url 具有动态路径参数时 spring 安全
403 access forbidden error - spring security when the url has dynamic path param
我有一个名为 USER 的资源用于我的休息服务。
以下是此资源中的一些 api。
/api/users/{userId}/order/{orderId}
/api/users/{userId}/favoriteStores
我希望第一个 URL 受到保护,而第二个不需要安全。(举个例子 api urls)。
我按如下方式配置了安全配置
<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>
现在显示禁止错误。
我应该如何配置安全拦截 urls?
在 spring 安全性中,如果您不想拦截 URL 模式,则必须提供 permitAll 形式的访问值。此外 URL 模式必须与您想要的完全匹配。就像你的例子一样,如果你想允许 url 模式 rest/users/{userId}/favoriteStores
那么你必须添加这样的拦截模式:
<security:intercept-url pattern="/rest/users/*/favoriteStores/**"
access="permitAll" />
有关更多信息,您可以浏览 spring link for spring Expression-Based Access Control
如果你根本不想拦截 url 你可以简单地做
<http pattern="/rest/users/*/favoriteStores/**" security="none"/>
我有一个名为 USER 的资源用于我的休息服务。 以下是此资源中的一些 api。
/api/users/{userId}/order/{orderId}
/api/users/{userId}/favoriteStores
我希望第一个 URL 受到保护,而第二个不需要安全。(举个例子 api urls)。
我按如下方式配置了安全配置
<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>
现在显示禁止错误。
我应该如何配置安全拦截 urls?
在 spring 安全性中,如果您不想拦截 URL 模式,则必须提供 permitAll 形式的访问值。此外 URL 模式必须与您想要的完全匹配。就像你的例子一样,如果你想允许 url 模式 rest/users/{userId}/favoriteStores
那么你必须添加这样的拦截模式:
<security:intercept-url pattern="/rest/users/*/favoriteStores/**"
access="permitAll" />
有关更多信息,您可以浏览 spring link for spring Expression-Based Access Control
如果你根本不想拦截 url 你可以简单地做
<http pattern="/rest/users/*/favoriteStores/**" security="none"/>