@Secured和@PreAuthorize在Spring Security 3中有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

 @PreAuthorize("hasRole('ROLE_USER')")
 public void create(Contact contact)

@Secured("ROLE_USER")
public void create(Contact contact)

我知道PreAuthorize可以和Spring el一起工作,但在我的示例中,是否有真正的区别?

提问于
用户回答回答于

真正的区别是@PreAuthorize可以使用Spring表达式语言(SpEL)。你可以:

  • 访问方法和属性SecurityExpressionRoot
  • 访问方法参数(需要使用调试信息或自定义进行编译ParameterNameDiscoverer): @PreAuthorize("#contact.name == principal.name") public void doSomething(Contact contact)
  • (高级功能)添加你自己的方法(覆盖MethodSecurityExpressionHandler并设置为<global-method-security><expression-handler ... /></...>)。
用户回答回答于

如果你只想在用户具有Role1和Role2的情况下执行某些操作,则必须使用@PreAuthorize

@PreAuthorize("hasRole('ROLE_role1') and hasRole('ROLE_role2')")

运用

@Secured({"role1", "role2"}) is treated as an OR

扫码关注云+社区