【发布时间】:2012-12-31 05:41:32
【问题描述】:
我正在使用具有相同版本的 Spring 框架的 Spring security 3.2.0。 Spring security 在我的项目中运行良好。为了保护我的 DAO 类(和其他)中的方法,我想使用以下 pointcut 方法(在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:属性 'pointcutMap' 抛出异常;嵌套异常是 java.lang.IllegalArgumentException:切入点格式不正确: 在字符位置 26 处期待“名称模式” 执行(控制器。.*(..)) ^
我正在尝试遵循 3.4.1 <global-method-security> 元素的 Adding Security Pointcuts usingprotect-pointcut 小节中 reference document 指定的方法 部分。
在这种情况下正确的表达式语法是什么?
编辑:
使用protect-pointcut添加安全切入点
protect-pointcut 的使用特别强大,因为它允许您通过简单的声明将安全性应用于许多 bean。考虑以下示例:
<global-method-security>
<protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/>
</global-method-security>
这将保护在应用程序上下文中声明的类在com.mycompany 包中并且类名以“Service”结尾的所有bean 方法。只有具有ROLE_USER 角色的用户才能调用这些方法。与 URL 匹配一样,最具体的匹配必须在切入点列表中排在第一位,因为将使用第一个匹配表达式。安全注释优先于切入点。
复制并粘贴参考文档中解释的部分(因为有人可能会觉得滚动文档很乏味)。
【问题讨论】:
标签: spring spring-security pointcut