【发布时间】:2010-10-05 09:08:42
【问题描述】:
我有以下情况:我的应用程序的授权机制是使用Spring security实现的。中心类实现 AccessDecisionManager 并使用投票者(每个投票者都实现 AccessDecisionVoter)来决定是否授予对某些方法的访问权限。计票的算法是自定义的:
public class PermissionManagerImpl extends AbstractAccessDecisionManager {
public void decide(
Authentication authentication,
Object object,
ConfigAttributeDefinition config) throws AccessDeniedException {
Iterator<?> iter = getDecisionVoters().iterator();
boolean wasDenied = false;
while (iter.hasNext()) {
AccessDecisionVoter voter = (AccessDecisionVoter) iter.next();
int result = voter.vote(authentication, object, config);
switch (result) {
// Some tallying calculations
}
}
if (wasDenied) {
throw new AccessDeniedException("Access is denied");
}
}
}
在拒绝对某些方法的访问时,应用程序的客户端有兴趣获得一个信息异常,该异常详细说明为什么访问被拒绝。这意味着将一些信息从选民传递给决策经理。不幸的是,标准 AccessDecisionVoter 传递回决策管理器的唯一信息是可能的返回值之一(ACCESS_GRANTED、ACCESS_ABSTAIN 或 ACCESS_DENIED)。
最好的方法是什么?
谢谢。
【问题讨论】:
标签: java authorization spring-security