Dre*_*ter 35 security spring annotations shiro
我一直在对Apache Shiro和Spring Security进行一些比较 - 我真的很喜欢Shiro使用的安全模型,并相信它比Spring Security更清晰.
但是,一个很好的方法是能够从方法级安全注释中引用方法参数.例如,现在我可以这样:
@RequiresPermissions("account:send:*")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }
Run Code Online (Sandbox Code Playgroud)
在此示例的上下文中,这意味着经过身份验证的用户必须具有在电子邮件帐户上发送电子邮件的权限.
但是,这不是很细粒度,因为我想要实例级权限!在此上下文中,假设用户可以拥有电子邮件帐户实例的权限.所以,我想写一下这样的代码:
@RequiresPermissions("account:send:${account.id}")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }
Run Code Online (Sandbox Code Playgroud)
通过这种方式,权限字符串引用传递给方法的参数,以便可以针对特定的EmailAccount实例保护该方法.
我知道我可以从方法中的普通Java代码轻松地做到这一点,但使用注释实现相同的东西会很棒 - 我知道Spring Security在其注释中支持Spring EL表达式.
这绝对不是Shiro的特色,因此我必须编写自己的自定义注释吗?
谢谢,
安德鲁
请查看http://shiro.apache.org/static/current/apidocs/org/apache/shiro/authz/aop/package-summary.html中的类,特别是PermissionAnnotationHandler
.在那里你可以看到,当遇到@RequiresPermissions
注释时,所有Shiro 都会调用,getSubject().isPermitted(permission)
并且根本不会在注释值中进行替换.如果你想要这种功能,你必须以某种方式覆盖该处理程序.
所以回答你的问题:是的,这绝对不是Shiro的一个功能,你必须编写自己的注释或以某种方式覆盖该处理程序.
归档时间: |
|
查看次数: |
2616 次 |
最近记录: |