Java 基于角色的身份验证不起作用

Java 基于角色的身份验证不起作用,java,jakarta-ee,struts2,spring-security,Java,Jakarta Ee,Struts2,Spring Security,我是我的struts2应用程序上的applyng spring security,我可以使用拦截器url提供对主url的访问,但不能访问其子集 例如,我需要向具有客户角色的用户授予仅查看书籍的权限,因此我使用 以下 <http auto-config="true" access-denied-page="/not.jsp" use-expressions="true"> .... <intercept-url pattern="/Books/view

我是我的struts2应用程序上的applyng 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')" /> 

Regex“*”表示任何短语。所以我认为你没有任何URL模式/书籍/视图,或者在这个词后面没有更多的字符。此外,regex“/Books/view*”和“/Books/view”没有任何区别。它们是一样的

但是“/Books/*”此URL模式与其他URL模式不同。它匹配/Books/level上的任何URL模式请求资源


我可以说的是重新检查你的url模式。我无法不认识他们

检查前面的映射。不要忘记,如果您在同一url到达此行之前为其提供对其他角色的访问,则会拒绝ROLE_客户对该地址的访问,因此请使用其他表达式授予对需要同时访问该url的所有角色的访问权