/** * Check whether the given object is a Spring proxy. * @param object the object to check */ private static boolean isSpringAopProxy(Object object) { Class<?> clazz = object.getClass(); return (implementsInterface(clazz, SPRING_SPRINGPROXY_CLASS_NAME) && (Proxy.isProxyClass(clazz) || isCglibProxyClass(clazz))); }
/** * Check whether the given member is a proxy member of a proxy object. * @param member the member to check * @param object the object to check */ public static boolean isProxyMember(Member member, Object object) { if (!isProxy(object)) return false; Boolean flag = isProxyMemberCache.get(member); if (flag != null) { return flag; } boolean isProxyMember = isSpringProxyMember(member); isProxyMemberCache.put(member, isProxyMember); return isProxyMember; }
/** * Check whether the given object is a proxy. * @param object the object to check */ private static boolean isProxy(Object object) { Class<?> clazz = object.getClass(); Boolean flag = isProxyCache.get(clazz); if (flag != null) { return flag; } boolean isProxy = isSpringAopProxy(object); isProxyCache.put(clazz, isProxy); return isProxy; }
/** * Check whether the given member is a member of a spring proxy. * @param member the member to check */ private static boolean isSpringProxyMember(Member member) { try { Class<?> clazz = ClassLoaderUtil.loadClass(SPRING_ADVISED_CLASS_NAME, ProxyUtil.class); if (hasMember(clazz, member)) return true; clazz = ClassLoaderUtil.loadClass(SPRING_TARGETCLASSAWARE_CLASS_NAME, ProxyUtil.class); if (hasMember(clazz, member)) return true; clazz = ClassLoaderUtil.loadClass(SPRING_SPRINGPROXY_CLASS_NAME, ProxyUtil.class); if (hasMember(clazz, member)) return true; } catch (ClassNotFoundException ignored) { } return false; }
Class clazz = excludeProxyProperties ? ProxyUtil.ultimateTargetClass(object) : object.getClass();
if (disallowProxyMemberAccess && ProxyUtil.isProxyMember(member, target)) { LOG.warn("Access to proxy is blocked! Target class [#0] of target [#1], member [#2]", targetClass, target, member); return false;