【发布时间】:2014-09-13 18:32:16
【问题描述】:
我正在实现一个应用程序,该应用程序具有一些完全基于权限的访问方法。权限是使用 Spring 实现的。使用方法顶部的 @PreAuthorize 注释添加权限。问题是我想在注释中有完全自定义的方法(EL)。 所以我想实现的是例如:
@PreAuthorize("customAllowThis()")
public void foo() { }
我认为有两种方法:
方法一: 尝试覆盖 SecurityExpressionRoot 并在那里添加我的自定义方法。我会在不同的方法上使用多个授权服务,所以把所有特定的方法都放到 SecurityExpressionRoot 会很混乱。
方法 2: 创建服务并将方法放在那里:
@Component
public class AuthorisationService {
public boolean allowThis() {
return true;
}
}
然后做一些类似的事情:
@PreAuthorize("@authorisationService.customAllowThis()")
public void foo() { }
我更喜欢方法 2,尽管在我看来它会绕过 Spring 的“自然顺序”。在如何处理这种情况方面有什么好的/最佳实践吗?关键是我不想将所有特定方法都放在一个类中,但另一方面我不想做一些“肮脏”的事情。
【问题讨论】:
-
嘿,我见过这个,但是有人说这在 Spring 3.x 中是不可能的,还有另一条评论说这家伙就是这样做的。我有点困惑。!
-
你试试看?还是您只要求最佳实践?
-
只是寻求最佳实践..
标签: java spring spring-security