Spring security Spring安全性:将方法安全性注释移出代码

Spring security Spring安全性:将方法安全性注释移出代码,spring-security,Spring Security,我看了春季安全视频 大约36:30,他谈到了使用安全注释和方法签名保护方法,如下所示: @Secured("ROLE_USER") public String create(); 为什么我们需要将注释与方法一起保留?(因为安全注释与方法的功能无关) 我可以把这些注释放到一个单独的文件中,这样我就可以在不修改实际代码的情况下修改它们吗?(可能使用类似Spring AOP的功能)是的,多亏了Spring AOP,您才可以做到这一点: <global-method-security>

我看了春季安全视频

大约36:30,他谈到了使用安全注释和方法签名保护方法,如下所示:

@Secured("ROLE_USER")
public String create();
为什么我们需要将注释与方法一起保留?(因为安全注释与方法的功能无关)


我可以把这些注释放到一个单独的文件中,这样我就可以在不修改实际代码的情况下修改它们吗?(可能使用类似Spring AOP的功能)

是的,多亏了Spring AOP,您才可以做到这一点:

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

一个符合你需要的表达

XML声明灵活性的角度来看很好。考虑以下情况:

  • 您希望在两个模块中重用某些服务,但希望有不同的安全规则
  • 您希望对每个包应用一些安全限制
只有使用XML才有可能

注释从可读性角度来看是好的。当您看到某个方法时,您可以直接查看所有安全限制。无需每次打开一些XML文件并考虑表达式(是否适用于此方法?)。所以这很容易


不要将两种方法混用。太令人困惑了。检查您的需求并选择最适合您的项目。

感谢您的详细回复。如果我在Spring项目中使用Shiro,我还可以使用Spring AOP删除方法安全性注释吗?我对ApacheShiro没有经验,所以我不知道。但我相信这一定是可能的。您可能需要用一些更低级的SpringAOPXML重写这个SpringSecurityXML。或者可能是ApacheShiro提供了类似的现成功能。