我正在使用Spring安全性3.2.0和相同版本的Spring框架。 Spring安全性在我的项目中运行良好。为了保护我的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 {{>>使用protect-pointcut 子部分的添加安全性切入点中的reference document所指定的方法{{3}} 1}}元素部分。
此方案中的正确表达式语法是什么?
修改
使用protect-pointcut添加安全切入点
使用protect-pointcut特别强大,因为它允许您只使用简单的声明将安全性应用于许多bean。请考虑以下示例:
<global-method-security>
这将保护在应用程序上下文中声明的bean上的所有方法,这些bean的类在<global-method-security>
<protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/>
</global-method-security>
包中,其类名以“Service”结尾。只有具有com.mycompany
角色的用户才能调用这些方法。与URL匹配一样,最具体的匹配必须首先出现在切入点列表中,因为将使用第一个匹配表达式。安全注释优先于切入点。
复制&amp;粘贴参考文档中解释的部分(因为有人可能会发现滚动文档很乏味。)
答案 0 :(得分:5)
尝试使用此表达式:
<protect-pointcut expression="execution(* your.package.controller.*.*(..))" access="ROLE_ADMIN"/>