预授权方法堆栈

时间:2014-12-22 11:07:14

标签: java spring spring-security

在另一种方法中调用预授权方法时,最好是将@PreAuthorize添加到调用者,还是应该使用Spring applicationContext调用它。我在一个例子中看到了第二种方式。代码片段如下,其中哪一个更好,为什么?

方法1

@PreAuthorize(...)
public List<String> methodA(args) {

}

@PreAuthorize(...)
public List<String> methodB(args, extraArgs) {
    List<String> aList = methodA(args);

    // Modify aList

    return aList;
}

方法2

@PreAuthorize(...)
public List<String> methodA(args) {

}

// This will be authorized when we call methodA
public List<String> methodB(args, extraArgs) {
    ThisClass springProxy = applicationContext.getBean(ThisClass.class);
    List<String> aList = springProxy.methodA(args);

    // Modify aList

    return aList;
}

1 个答案:

答案 0 :(得分:0)

因为Spring使用代理定义Aspect。使用method1,当您从methodB调用methodA时,您就在代理中。然后,Spŕing添加的所有方面都超出了范围。您需要将PreAuthorize注释应用于定义API的所有方法。