【问题标题】:A simple pointcut expression in SpringSpring中一个简单的切入点表达式
【发布时间】: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 &lt;global-method-security&gt; 元素的 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


    【解决方案1】:

    试试这个表达式:

    <protect-pointcut expression="execution(* your.package.controller.*.*(..))" access="ROLE_ADMIN"/>
    

    【讨论】:

    • 不幸的是,它产生了同样的异常 - ...Pointcut is not well-formed: expecting 'name pattern' at character position 29 execution(* ..controller.*.*(..))
    • 尝试更新版本;o,如果它不起作用,您可以发布您的控制器之一的包吗?
    • 是的,这有效 - execution(* controller.*.*(..)) 并且安全约束应用于该包内所有类中的所有方法。但我不确定为什么*controller 之间需要一个空格?非常感谢。
    • 它需要一个空格,因为第一个*是方法的返回值。您需要返回值和方法签名的表达式。
    • 感谢您的澄清。与具体问题无关 - 我的应用程序中名为 controller 的包包含 DAO 而不是 Spring 控制器 - 文档说 - 注释的方法将仅针对定义为 Spring bean 的实例(在同一个应用程序中启用方法安全的上下文)。如果您想保护不是由 Spring 创建的实例(例如使用 new 运算符),那么您需要使用 AspectJ。 未来的访问者不应感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多