Spring security 如何在使用spring安全注释时调用不安全的代理?

Spring security 如何在使用spring安全注释时调用不安全的代理?,spring-security,Spring Security,我在我的项目中使用spring安全注释。在某些情况下,我希望调用注释对象的无安全性版本。Spring默认情况下会为带注释的对象创建一个启用安全性的代理,并将其用于代码中的自动连接,我是否可以使用Spring实现这一点? 一种明显的方法是手动创建对应于每个类的代理类,我希望此功能为每个类注释这些方法,这些方法的实现只是将其委托给实际对象。作为JDK代理的一个选项,您可以在运行时获得实际的bean: MyBean proxy; if(AopUtils.isJdkDynamicProxy(pr

我在我的项目中使用spring安全注释。在某些情况下,我希望调用注释对象的无安全性版本。Spring默认情况下会为带注释的对象创建一个启用安全性的代理,并将其用于代码中的自动连接,我是否可以使用Spring实现这一点?

一种明显的方法是手动创建对应于每个类的代理类,我希望此功能为每个类注释这些方法,这些方法的实现只是将其委托给实际对象。

作为JDK代理的一个选项,您可以在运行时获得实际的bean:

MyBean proxy;    
if(AopUtils.isJdkDynamicProxy(proxy)) {
    MyBean actualInstance = (MyBean) ((Advised)proxy).getTargetSource().getTarget()
}

actualInstance.doSomethingSecured(); // no advice related to this method will be called
// so your security annotation will be ignored (transactions, cache, and everething that requires AOP too...)
但从体系结构的角度来看,使用手动代理的方法看起来不那么容易出错(除非您绝对确定不需要安全性和其他所有可能的方面)

您可以使用泛型提高可读性:

MyBean actualInstance = extractProxyTarget(proxy, proxy.getClass());
actualInstance.doSomethingSecured();