我的Java应用程序使用Spring的@PreAuthorize("hasAuthority('SomeScopeName')")
on方法来Assert用户被授权执行方法中的操作。如果用户未经授权,则此注解将抛出AccessDeniedException
:
@Override
@PreAuthorize("hasAuthority('SomeScopeName')")
public void assertHasDisplayAuthorization() {
// empty on purpose
}
字符串
应用程序的一个端点想要通知用户界面用户能够执行哪些操作。为此,它计算了一个Authorizations
对象,该对象呈现为JSON,如{ canDisplay: true, canEdit: false, ... }
:
public Authorizations getAuthorizations() {
return new Authorizations(hasDisplayAuthorization(), hasEditAuthorization(), ...);
}
型
该计算调用@PreAuthorize
'd方法来确定用户的授权:
private boolean hasDisplayAuthorization() {
try {
validator.assertHasDisplayAuthorization();
return true;
} catch (AccessDeniedException e) {
return false;
}
}
型
这是可行的,但我不喜欢这样的事实,我需要抛出和捕获一个异常,只是为了计算一个简单的true/false。
是否有可能计算Authorizations
对象而不必抛出异常?
例如,在@Value
注解中计算授权并将其分配给对象属性是否可能和可靠?
@Value("hasAuthority('SomeScopeName')")
boolean canDisplay;
... return new Authorizations(canDisplay, ...);
型
1条答案
按热度按时间vddsk6oq1#
您可以使用下面的类来手动执行此操作,而不是使用
@PreAuthorize
:字符串
然后,您可以定义一个额外的类,其中包含用于检查每个范围的方法,例如:
型
请记住,只要
SecurityContext
在当前线程中可用,它就可以工作,否则,它将抛出异常。