我有一个可以在两种身份验证方法都返回true时执行的方法。

@PreAuthorize("canExec('ROLE_A') || canExec('ROLE_B')")
public String getSomething() {
    return "Something";
}


如何记录身份验证是成功还是失败,这意味着整个SpEL查询的结果是对还是错?

以下是不可能的解决方案,因为可以在同一SpEL中多次调用它,并且多个记录的结果不会反映授权的实际结果。

public boolean canExec(String role) {
    boolean result = ...acutal evaluation...;
    log.info("auth result for role {}: {}", role, result);
    return result;
}

最佳答案

public boolean canExecOr(String roleA, String RoleB) {
    boolean canA = canExec(roleA);
    boolean canB = canExec(roleB);
    // log...
   return canA || canB;
}

@PreAuthorize("canExecComposite('ROLE_A','ROLE_B')")


??

10-05 21:31