【问题标题】:Role-based authentication does not work基于角色的身份验证不起作用
【发布时间】:2013-05-29 03:16:55
【问题描述】:

我在我的 struts2 应用程序上应用 spring security 我可以使用拦截器 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')" /> 

【问题讨论】:

    标签: java jakarta-ee struts2 spring-security


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-03-13
        • 1970-01-01
        • 2020-12-21
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 1970-01-01
        相关资源
        最近更新 更多