1

我正在使用具有相同版本的 Spring 框架的 Spring security 3.2.0。Spring security 在我的项目中运行良好。为了保护我的 DAO 类(和其他)中的方法,我想使用以下切入点方法(在spring-security.xml文件中)。

<global-method-security>
    <protect-pointcut expression="execution(*controller.*.*(..))" access="ROLE_ADMIN"/>
</global-method-security>

我希望指定的切入点表达式能够保护包内所有类中的所有方法,controller并且只能由具有ROLE_ADMIN指定权限的用户访问。

但是当我尝试使用这个表达式时,该过程在保存我的spring-security.xml文件时终止,并出现以下异常。

PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'pointcutMap' 抛出异常;嵌套异常是 java.lang.IllegalArgumentException:切入点格式不正确:期望在字符位置 26 处执行“名称模式”(控制器。*(..))^

我正在尝试遵循3.4.1元素部分的使用保护切入点添加安全切入点中的参考文档中指定的方法。<global-method-security>

在这种情况下,正确的表达式语法是什么?


编辑:

使用保护切入点添加安全切入点

保护切入点的使用特别强大,因为它允许您通过简单的声明将安全性应用于许多 bean。考虑以下示例:

<global-method-security>
    <protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/>
</global-method-security>

这将保护在应用程序上下文中声明的类在com.mycompany包中且类名以“Service”结尾的所有 bean 方法。只有具有该ROLE_USER角色的用户才能调用这些方法。与 URL 匹配一样,最具体的匹配必须在切入点列表中排在第一位,因为将使用第一个匹配表达式。安全注释优先于切入点。

复制并粘贴参考文档中解释的部分(因为有人可能会发现滚动文档很乏味)。

4

1 回答 1

5

试试这个表达式:

<protect-pointcut expression="execution(* your.package.controller.*.*(..))" access="ROLE_ADMIN"/>
于 2013-01-16T19:53:38.227 回答