0

我在我的 struts2 应用程序上应用 spring security 我可以使用interceptor-url 来提供对主 url 但不是它们的子集的访问。

例如,我需要授予具有客户角色的用户仅查看书籍的权限,因此我使用以下内容

    <http auto-config="true" access-denied-page="/not.jsp" use-expressions="true">
      ....
    <intercept-url pattern="/Books/view*" access="hasRole('ROLE_CUSTOMER')"/>

所以我想用户应该能够访问 localhost:8888/Books/view.action 但他们没有,它会将他们重定向到 not.jsp 页面(访问拒绝页面)

我已经尝试了以下所有方法,但都没有奏效

    <intercept-url pattern="/Books/view.action" access="hasRole('ROLE_CUSTOMER')"/>
    <intercept-url pattern="/Books/view**" access="hasRole('ROLE_CUSTOMER')"/>
    <intercept-url pattern="/Books/view.action*" access="hasRole('ROLE_CUSTOMER')"/>

唯一有效的是以下一个,它可以访问我不想要的所有操作(编辑、删除和查看)。

     <intercept-url pattern="/Books/*" access="hasRole('ROLE_CUSTOMER')" /> 
4

2 回答 2

1

检查以前的映射。不要忘记,如果您在同一 url 到达此行之前提供对其他角色的访问权限,它将拒绝 ROLE_CUSTOMER 对该地址的访问,因此请使用其他表达式来授予对所有需要访问该 url 的所有角色的访问权限一次。

于 2013-06-03T10:49:08.007 回答
0

正则表达式“*”表示任何短语。所以我能想到的是你没有任何 URL 模式 /Books/view 或在那个词之后没有更多字符。正则表达式“/Books/view* ”和“/Books/view ”也没有任何不同。他们是一样的。

但是“/Books/*”这个 URL 模式与其他的不同。它匹配任何 URL 模式请求 /Books/ 级别的资源。

我能说的是重新检查您拥有的网址模式。不能不知道他们。

于 2013-06-03T04:24:31.503 回答