HHH-12931 Revert "HHH-12542 - Add necessary privileged action blocks for SecurityManager used on WildFly."

This reverts commit d24685de67.
This commit is contained in:
Guillaume Smet 2018-08-27 17:22:15 +02:00
parent b8b0fbc13c
commit 56a29af496
9 changed files with 153 additions and 330 deletions

View File

@ -12,8 +12,6 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Properties; import java.util.Properties;
import org.hibernate.boot.cfgxml.spi.LoadedConfig; import org.hibernate.boot.cfgxml.spi.LoadedConfig;
@ -50,34 +48,27 @@ public class ConfigLoader {
} }
public LoadedConfig loadConfigXmlResource(String cfgXmlResourceName) { public LoadedConfig loadConfigXmlResource(String cfgXmlResourceName) {
final PrivilegedAction<JaxbCfgHibernateConfiguration> action = new PrivilegedAction<JaxbCfgHibernateConfiguration>() { final InputStream stream = bootstrapServiceRegistry.getService( ClassLoaderService.class ).locateResourceStream( cfgXmlResourceName );
@Override if ( stream == null ) {
public JaxbCfgHibernateConfiguration run() { throw new ConfigurationException( "Could not locate cfg.xml resource [" + cfgXmlResourceName + "]" );
final InputStream stream = bootstrapServiceRegistry.getService( ClassLoaderService.class ).locateResourceStream( cfgXmlResourceName ); }
if ( stream == null ) {
throw new ConfigurationException( "Could not locate cfg.xml resource [" + cfgXmlResourceName + "]" );
}
try { try {
return jaxbProcessorHolder.getValue().unmarshal( final JaxbCfgHibernateConfiguration jaxbCfg = jaxbProcessorHolder.getValue().unmarshal(
stream, stream,
new Origin( SourceType.RESOURCE, cfgXmlResourceName ) new Origin( SourceType.RESOURCE, cfgXmlResourceName )
); );
}
finally { return LoadedConfig.consume( jaxbCfg );
try { }
stream.close(); finally {
} try {
catch ( IOException e ) { stream.close();
log.debug( "Unable to close cfg.xml resource stream", e );
}
}
} }
}; catch (IOException e) {
log.debug( "Unable to close cfg.xml resource stream", e );
return LoadedConfig.consume( }
System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run() }
);
} }
public LoadedConfig loadConfigXmlFile(File cfgXmlFile) { public LoadedConfig loadConfigXmlFile(File cfgXmlFile) {

View File

@ -7,9 +7,6 @@
package org.hibernate.boot.jaxb.internal; package org.hibernate.boot.jaxb.internal;
import java.io.InputStream; import java.io.InputStream;
import java.security.AccessController;
import java.security.PrivilegedAction;
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller; import javax.xml.bind.Unmarshaller;
@ -101,15 +98,8 @@ public abstract class AbstractBinder implements Binder {
private Binding doBind(XMLEventReader eventReader, Origin origin) { private Binding doBind(XMLEventReader eventReader, Origin origin) {
try { try {
final PrivilegedAction<Binding> action = new PrivilegedAction<Binding>() { final StartElement rootElementStartEvent = seekRootElementStartEvent( eventReader, origin );
@Override return doBind( eventReader, rootElementStartEvent, origin );
public Binding run() {
final StartElement rootElementStartEvent = seekRootElementStartEvent( eventReader, origin );
return doBind( eventReader, rootElementStartEvent, origin );
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
finally { finally {
try { try {

View File

@ -83,16 +83,11 @@ public class ClassLoaderServiceImpl implements ClassLoaderService {
orderedClassLoaderSet.add( ClassLoaderServiceImpl.class.getClassLoader() ); orderedClassLoaderSet.add( ClassLoaderServiceImpl.class.getClassLoader() );
// now build the aggregated class loader... // now build the aggregated class loader...
final PrivilegedAction<AggregatedClassLoader> action = new PrivilegedAction<AggregatedClassLoader>() { this.aggregatedClassLoader = AccessController.doPrivileged( new PrivilegedAction<AggregatedClassLoader>() {
@Override
public AggregatedClassLoader run() { public AggregatedClassLoader run() {
return new AggregatedClassLoader( orderedClassLoaderSet, lookupPrecedence ); return new AggregatedClassLoader( orderedClassLoaderSet, lookupPrecedence );
} }
}; } );
this.aggregatedClassLoader = System.getSecurityManager() != null
? AccessController.doPrivileged( action )
: action.run();
} }
/** /**
@ -352,62 +347,49 @@ public class ClassLoaderServiceImpl implements ClassLoaderService {
@Override @Override
@SuppressWarnings({"unchecked"}) @SuppressWarnings({"unchecked"})
public <T> Class<T> classForName(String className) { public <T> Class<T> classForName(String className) {
final PrivilegedAction<Class<T>> action = new PrivilegedAction<Class<T>>() { try {
@Override return (Class<T>) Class.forName( className, true, getAggregatedClassLoader() );
public Class<T> run() { }
try { catch (Exception e) {
return (Class<T>) Class.forName( className, true, getAggregatedClassLoader() ); throw new ClassLoadingException( "Unable to load class [" + className + "]", e );
} }
catch (Exception e) { catch (LinkageError e) {
throw new ClassLoadingException( "Unable to load class [" + className + "]", e ); throw new ClassLoadingException( "Unable to load class [" + className + "]", e );
} }
catch (LinkageError e) {
throw new ClassLoadingException( "Unable to load class [" + className + "]", e );
}
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
@Override @Override
public URL locateResource(final String name) { public URL locateResource(String name) {
final PrivilegedAction<URL> action = new PrivilegedAction<URL>() { // first we try name as a URL
@Override try {
public URL run() { return new URL( name );
try { }
return new URL( name ); catch (Exception ignore) {
} }
catch (Exception ignore) {
}
try { try {
final URL url = getAggregatedClassLoader().getResource( name ); final URL url = getAggregatedClassLoader().getResource( name );
if ( url != null ) { if ( url != null ) {
return url; return url;
}
}
catch (Exception ignore) {
}
if ( name.startsWith( "/" ) ) {
final String resourceName = name.substring( 1 );
try {
final URL url = getAggregatedClassLoader().getResource( resourceName );
if ( url != null ) {
return url;
}
}
catch (Exception ignore) {
}
}
return null;
} }
}; }
catch (Exception ignore) {
}
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run(); if ( name.startsWith( "/" ) ) {
name = name.substring( 1 );
try {
final URL url = getAggregatedClassLoader().getResource( name );
if ( url != null ) {
return url;
}
}
catch (Exception ignore) {
}
}
return null;
} }
@Override @Override
@ -474,22 +456,16 @@ public class ClassLoaderServiceImpl implements ClassLoaderService {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <S> Collection<S> loadJavaServices(Class<S> serviceContract) { public <S> Collection<S> loadJavaServices(Class<S> serviceContract) {
final PrivilegedAction<Collection<S>> action = new PrivilegedAction<Collection<S>>() { ServiceLoader<S> serviceLoader = serviceLoaders.get( serviceContract );
@Override if ( serviceLoader == null ) {
public Collection<S> run() { serviceLoader = ServiceLoader.load( serviceContract, getAggregatedClassLoader() );
ServiceLoader<S> serviceLoader = serviceLoaders.get( serviceContract ); serviceLoaders.put( serviceContract, serviceLoader );
if ( serviceLoader == null ) { }
serviceLoader = ServiceLoader.load( serviceContract, getAggregatedClassLoader() ); final LinkedHashSet<S> services = new LinkedHashSet<S>();
serviceLoaders.put( serviceContract, serviceLoader ); for ( S service : serviceLoader ) {
} services.add( service );
final LinkedHashSet<S> services = new LinkedHashSet<S>(); }
for ( S service : serviceLoader ) { return services;
services.add( service );
}
return services;
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
@Override @Override
@ -504,13 +480,7 @@ public class ClassLoaderServiceImpl implements ClassLoaderService {
@Override @Override
public <T> T workWithClassLoader(Work<T> work) { public <T> T workWithClassLoader(Work<T> work) {
final PrivilegedAction<T> action = new PrivilegedAction<T>() { return work.doWork( getAggregatedClassLoader() );
@Override
public T run() {
return work.doWork( getAggregatedClassLoader() );
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
private ClassLoader getAggregatedClassLoader() { private ClassLoader getAggregatedClassLoader() {

View File

@ -10,8 +10,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment; import org.hibernate.cfg.Environment;
@ -115,33 +113,28 @@ public final class ConfigHelper {
} }
public static InputStream getResourceAsStream(String resource) { public static InputStream getResourceAsStream(String resource) {
final PrivilegedAction<InputStream> action = new PrivilegedAction<InputStream>() { String stripped = resource.startsWith( "/" )
@Override ? resource.substring( 1 )
public InputStream run() { : resource;
String stripped = resource.startsWith( "/" )
? resource.substring( 1 )
: resource;
InputStream stream = null; InputStream stream = null;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if ( classLoader != null ) { if ( classLoader != null ) {
stream = classLoader.getResourceAsStream( stripped ); stream = classLoader.getResourceAsStream( stripped );
} }
if ( stream == null ) { if ( stream == null ) {
stream = Environment.class.getResourceAsStream( resource ); stream = Environment.class.getResourceAsStream( resource );
} }
if ( stream == null ) { if ( stream == null ) {
stream = Environment.class.getClassLoader().getResourceAsStream( stripped ); stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
} }
if ( stream == null ) { if ( stream == null ) {
throw new HibernateException( resource + " not found" ); throw new HibernateException( resource + " not found" );
} }
return stream; return stream;
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
public static InputStream getUserResourceAsStream(String resource) { public static InputStream getUserResourceAsStream(String resource) {
boolean hasLeadingSlash = resource.startsWith( "/" ); boolean hasLeadingSlash = resource.startsWith( "/" );
String stripped = hasLeadingSlash ? resource.substring( 1 ) : resource; String stripped = hasLeadingSlash ? resource.substring( 1 ) : resource;

View File

@ -13,8 +13,6 @@ import java.lang.reflect.Field;
import java.lang.reflect.Member; import java.lang.reflect.Member;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Locale; import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.persistence.Transient; import javax.persistence.Transient;
@ -237,14 +235,7 @@ public final class ReflectHelper {
} }
private static Getter getter(Class clazz, String name) throws MappingException { private static Getter getter(Class clazz, String name) throws MappingException {
final PrivilegedAction<Getter> action = new PrivilegedAction<Getter>() { return PropertyAccessStrategyMixedImpl.INSTANCE.buildPropertyAccess( clazz, name ).getGetter();
@Override
public Getter run() {
return PropertyAccessStrategyMixedImpl.INSTANCE.buildPropertyAccess( clazz, name ).getGetter();
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
public static Object getConstantValue(String name, SessionFactoryImplementor factory) { public static Object getConstantValue(String name, SessionFactoryImplementor factory) {
@ -281,23 +272,16 @@ public final class ReflectHelper {
return null; return null;
} }
final PrivilegedAction<Constructor> action = new PrivilegedAction<Constructor>() { try {
@Override Constructor<T> constructor = clazz.getDeclaredConstructor( NO_PARAM_SIGNATURE );
public Constructor run() { ensureAccessibility( constructor );
try { return constructor;
Constructor<T> constructor = clazz.getDeclaredConstructor( NO_PARAM_SIGNATURE ); }
ensureAccessibility( constructor ); catch ( NoSuchMethodException nme ) {
return constructor; throw new PropertyNotFoundException(
} "Object class [" + clazz.getName() + "] must declare a default (no-argument) constructor"
catch (NoSuchMethodException e) { );
throw new PropertyNotFoundException( }
"Object class [" + clazz.getName() + "] must declare a default (no-argument) constructor"
);
}
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
/** /**
@ -364,19 +348,12 @@ public final class ReflectHelper {
} }
public static Method getMethod(Class clazz, Method method) { public static Method getMethod(Class clazz, Method method) {
final PrivilegedAction<Method> action = new PrivilegedAction<Method>() { try {
@Override return clazz.getMethod( method.getName(), method.getParameterTypes() );
public Method run() { }
try { catch (Exception e) {
return clazz.getMethod( method.getName(), method.getParameterTypes() ); return null;
} }
catch (Exception e){
return null;
}
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
public static Field findField(Class containerClass, String propertyName) { public static Field findField(Class containerClass, String propertyName) {
@ -387,14 +364,8 @@ public final class ReflectHelper {
throw new IllegalArgumentException( "Illegal attempt to locate field [" + propertyName + "] on Object.class" ); throw new IllegalArgumentException( "Illegal attempt to locate field [" + propertyName + "] on Object.class" );
} }
final PrivilegedAction<Field> action = new PrivilegedAction<Field>() { Field field = locateField( containerClass, propertyName );
@Override
public Field run() {
return locateField( containerClass, propertyName );
}
};
final Field field = System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
if ( field == null ) { if ( field == null ) {
throw new PropertyNotFoundException( throw new PropertyNotFoundException(
String.format( String.format(
@ -412,22 +383,11 @@ public final class ReflectHelper {
} }
public static void ensureAccessibility(AccessibleObject accessibleObject) { public static void ensureAccessibility(AccessibleObject accessibleObject) {
final PrivilegedAction<Object> action = new PrivilegedAction<Object>() { if ( accessibleObject.isAccessible() ) {
@Override return;
public Object run() { }
if ( !accessibleObject.isAccessible() ) {
accessibleObject.setAccessible( true );
}
return null;
}
};
if ( System.getSecurityManager() != null ) { accessibleObject.setAccessible( true );
AccessController.doPrivileged( action );
}
else {
action.run();
}
} }
private static Field locateField(Class clazz, String propertyName) { private static Field locateField(Class clazz, String propertyName) {
@ -502,7 +462,7 @@ public final class ReflectHelper {
} }
private static Method getGetterOrNull(Class containerClass, String propertyName) { private static Method getGetterOrNull(Class containerClass, String propertyName) {
for ( Method method : getDeclaredMethods( containerClass ) ) { for ( Method method : containerClass.getDeclaredMethods() ) {
// if the method has parameters, skip it // if the method has parameters, skip it
if ( method.getParameterCount() != 0 ) { if ( method.getParameterCount() != 0 ) {
continue; continue;
@ -553,39 +513,17 @@ public final class ReflectHelper {
String propertyName, String propertyName,
Method getMethod, Method getMethod,
String stemName) { String stemName) {
final Method isMethod = getDeclaredMethod( containerClass, "is" + stemName ); // verify that the Class does not also define a method with the same stem name with 'is'
if ( isMethod != null ) { try {
final Method isMethod = containerClass.getDeclaredMethod( "is" + stemName );
if ( !Modifier.isStatic( isMethod.getModifiers() ) && isMethod.getAnnotation( Transient.class ) == null ) { if ( !Modifier.isStatic( isMethod.getModifiers() ) && isMethod.getAnnotation( Transient.class ) == null ) {
// No such method should throw the caught exception. So if we get here, there was // No such method should throw the caught exception. So if we get here, there was
// such a method. // such a method.
checkGetAndIsVariants( containerClass, propertyName, getMethod, isMethod ); checkGetAndIsVariants( containerClass, propertyName, getMethod, isMethod );
} }
} }
} catch (NoSuchMethodException ignore) {
}
private static Method getDeclaredMethod(Class containerClass, String methodName) {
final PrivilegedAction<Method> action = new PrivilegedAction<Method>() {
@Override
public Method run() {
try {
return containerClass.getDeclaredMethod( methodName );
}
catch (NoSuchMethodException ignore) {
return null;
}
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
}
private static Method[] getDeclaredMethods(Class containerClass) {
final PrivilegedAction<Method[]> action = new PrivilegedAction<Method[]>() {
@Override
public Method[] run() {
return containerClass.getDeclaredMethods();
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
private static void checkGetAndIsVariants( private static void checkGetAndIsVariants(
@ -616,14 +554,16 @@ public final class ReflectHelper {
Method isMethod, Method isMethod,
String stemName) { String stemName) {
// verify that the Class does not also define a method with the same stem name with 'is' // verify that the Class does not also define a method with the same stem name with 'is'
final Method getMethod = getDeclaredMethod( containerClass, "get" + stemName ); try {
if ( getMethod != null ) { final Method getMethod = containerClass.getDeclaredMethod( "get" + stemName );
// No such method should throw the caught exception. So if we get here, there was // No such method should throw the caught exception. So if we get here, there was
// such a method. // such a method.
if ( !Modifier.isStatic( getMethod.getModifiers() ) && getMethod.getAnnotation( Transient.class ) == null ) { if ( !Modifier.isStatic( getMethod.getModifiers() ) && getMethod.getAnnotation( Transient.class ) == null ) {
checkGetAndIsVariants( containerClass, propertyName, getMethod, isMethod ); checkGetAndIsVariants( containerClass, propertyName, getMethod, isMethod );
} }
} }
catch (NoSuchMethodException ignore) {
}
} }
public static Method getterMethodOrNull(Class containerJavaType, String propertyName) { public static Method getterMethodOrNull(Class containerJavaType, String propertyName) {
@ -691,7 +631,7 @@ public final class ReflectHelper {
private static Method setterOrNull(Class theClass, String propertyName, Class propertyType) { private static Method setterOrNull(Class theClass, String propertyName, Class propertyType) {
Method potentialSetter = null; Method potentialSetter = null;
for ( Method method : getDeclaredMethods( theClass ) ) { for ( Method method : theClass.getDeclaredMethods() ) {
final String methodName = method.getName(); final String methodName = method.getName();
if ( method.getParameterCount() == 1 && methodName.startsWith( "set" ) ) { if ( method.getParameterCount() == 1 && methodName.startsWith( "set" ) ) {
final String testOldMethod = methodName.substring( 3 ); final String testOldMethod = methodName.substring( 3 );
@ -716,7 +656,7 @@ public final class ReflectHelper {
* as an abstract - but again, that is such an edge case... * as an abstract - but again, that is such an edge case...
*/ */
public static Method findGetterMethodForFieldAccess(Field field, String propertyName) { public static Method findGetterMethodForFieldAccess(Field field, String propertyName) {
for ( Method method : getDeclaredMethods( field.getDeclaringClass() ) ) { for ( Method method : field.getDeclaringClass().getDeclaredMethods() ) {
// if the method has parameters, skip it // if the method has parameters, skip it
if ( method.getParameterCount() != 0 ) { if ( method.getParameterCount() != 0 ) {
continue; continue;

View File

@ -10,8 +10,6 @@ import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -74,7 +72,6 @@ public class CallbackBuilderLegacyImpl implements CallbackBuilder {
} }
continue; continue;
} }
final Callback[] callbacks = resolveEntityCallbacks( entityXClass, callbackType, reflectionManager ); final Callback[] callbacks = resolveEntityCallbacks( entityXClass, callbackType, reflectionManager );
callbackRegistrar.registerCallbacks( entityClass, callbacks ); callbackRegistrar.registerCallbacks( entityClass, callbacks );
} }
@ -122,7 +119,7 @@ public class CallbackBuilderLegacyImpl implements CallbackBuilder {
final boolean debugEnabled = log.isDebugEnabled(); final boolean debugEnabled = log.isDebugEnabled();
do { do {
Callback callback = null; Callback callback = null;
List<XMethod> methods = getDeclaredMethods( currentClazz ); List<XMethod> methods = currentClazz.getDeclaredMethods();
for ( final XMethod xMethod : methods ) { for ( final XMethod xMethod : methods ) {
if ( xMethod.isAnnotationPresent( callbackType.getCallbackAnnotation() ) ) { if ( xMethod.isAnnotationPresent( callbackType.getCallbackAnnotation() ) ) {
Method method = reflectionManager.toMethod( xMethod ); Method method = reflectionManager.toMethod( xMethod );
@ -193,7 +190,7 @@ public class CallbackBuilderLegacyImpl implements CallbackBuilder {
if ( listener != null ) { if ( listener != null ) {
XClass xListener = reflectionManager.toXClass( listener ); XClass xListener = reflectionManager.toXClass( listener );
callbacksMethodNames = new ArrayList<>(); callbacksMethodNames = new ArrayList<>();
List<XMethod> methods = getDeclaredMethods( xListener ); List<XMethod> methods = xListener.getDeclaredMethods();
for ( final XMethod xMethod : methods ) { for ( final XMethod xMethod : methods ) {
if ( xMethod.isAnnotationPresent( callbackType.getCallbackAnnotation() ) ) { if ( xMethod.isAnnotationPresent( callbackType.getCallbackAnnotation() ) ) {
final Method method = reflectionManager.toMethod( xMethod ); final Method method = reflectionManager.toMethod( xMethod );
@ -341,14 +338,4 @@ public class CallbackBuilderLegacyImpl implements CallbackBuilder {
} }
} }
} }
private static List<XMethod> getDeclaredMethods(XClass clazz) {
final PrivilegedAction<List<XMethod>> action = new PrivilegedAction<List<XMethod>>() {
@Override
public List<XMethod> run() {
return clazz.getDeclaredMethods();
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
}
} }

View File

@ -7,8 +7,6 @@
package org.hibernate.metamodel.internal; package org.hibernate.metamodel.internal;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@ -378,26 +376,13 @@ class MetadataContext {
return; return;
} }
final String metamodelClassName = managedTypeClass.getName() + '_'; final String metamodelClassName = managedTypeClass.getName() + '_';
try {
final PrivilegedAction<Object> action = new PrivilegedAction<Object>() { final Class metamodelClass = Class.forName( metamodelClassName, true, managedTypeClass.getClassLoader() );
@Override // we found the class; so populate it...
public Object run() { registerAttributes( metamodelClass, managedType );
try {
final Class metamodelClass = Class.forName( metamodelClassName, true, managedTypeClass.getClassLoader() );
// we found the class; so populate it...
registerAttributes( metamodelClass, managedType );
}
catch (ClassNotFoundException ignore) {
// nothing to do...
}
return null;
}
};
if ( System.getSecurityManager() != null ) {
AccessController.doPrivileged( action );
} }
else { catch (ClassNotFoundException ignore) {
action.run(); // nothing to do...
} }
// todo : this does not account for @MappeSuperclass, mainly because this is not being tracked in our // todo : this does not account for @MappeSuperclass, mainly because this is not being tracked in our

View File

@ -8,8 +8,6 @@ package org.hibernate.tuple.entity;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -159,31 +157,24 @@ public class PojoEntityTuplizer extends AbstractEntityTuplizer {
null : null :
ReflectHelper.getMethod( proxyInterface, idSetterMethod ); ReflectHelper.getMethod( proxyInterface, idSetterMethod );
final PrivilegedAction<ProxyFactory> action = new PrivilegedAction<ProxyFactory>() { ProxyFactory pf = buildProxyFactoryInternal( persistentClass, idGetter, idSetter );
@Override try {
public ProxyFactory run() { pf.postInstantiate(
ProxyFactory pf = buildProxyFactoryInternal( persistentClass, idGetter, idSetter ); getEntityName(),
try { mappedClass,
pf.postInstantiate( proxyInterfaces,
getEntityName(), proxyGetIdentifierMethod,
mappedClass, proxySetIdentifierMethod,
proxyInterfaces, persistentClass.hasEmbeddedIdentifier() ?
proxyGetIdentifierMethod, (CompositeType) persistentClass.getIdentifier().getType() :
proxySetIdentifierMethod, null
persistentClass.hasEmbeddedIdentifier() ? );
(CompositeType) persistentClass.getIdentifier().getType() : }
null catch (HibernateException he) {
); LOG.unableToCreateProxyFactory( getEntityName(), he );
} pf = null;
catch (HibernateException he) { }
LOG.unableToCreateProxyFactory( getEntityName(), he ); return pf;
pf = null;
}
return pf;
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
} }
protected ProxyFactory buildProxyFactoryInternal( protected ProxyFactory buildProxyFactoryInternal(

View File

@ -7,8 +7,6 @@
package org.hibernate.envers.configuration.internal.metadata.reader; package org.hibernate.envers.configuration.internal.metadata.reader;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
@ -49,7 +47,6 @@ import org.hibernate.loader.PropertyPath;
import org.hibernate.mapping.Component; import org.hibernate.mapping.Component;
import org.hibernate.mapping.Property; import org.hibernate.mapping.Property;
import org.hibernate.mapping.Value; import org.hibernate.mapping.Value;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import static org.hibernate.envers.internal.tools.Tools.newHashMap; import static org.hibernate.envers.internal.tools.Tools.newHashMap;
@ -357,47 +354,26 @@ public class AuditedPropertiesReader {
//look in the class //look in the class
addFromProperties( addFromProperties(
getPropertiesFromClassByType( clazz, AccessType.FIELD ), clazz.getDeclaredProperties( "field" ),
it -> "field", it -> "field",
fieldAccessedPersistentProperties, fieldAccessedPersistentProperties,
allClassAudited allClassAudited
); );
addFromProperties( addFromProperties(
getPropertiesFromClassByType( clazz, AccessType.PROPERTY ), clazz.getDeclaredProperties( "property" ),
propertyAccessedPersistentProperties::get, propertyAccessedPersistentProperties::get,
propertyAccessedPersistentProperties.keySet(), propertyAccessedPersistentProperties.keySet(),
allClassAudited allClassAudited
); );
if ( allClassAudited != null || !auditedPropertiesHolder.isEmpty() ) { if ( allClassAudited != null || !auditedPropertiesHolder.isEmpty() ) {
final PrivilegedAction<XClass> action = new PrivilegedAction<XClass>() { final XClass superclazz = clazz.getSuperclass();
@Override
public XClass run() {
return clazz.getSuperclass();
}
};
final XClass superclazz = System.getSecurityManager() != null
? AccessController.doPrivileged( action )
: action.run();
if ( !clazz.isInterface() && !"java.lang.Object".equals( superclazz.getName() ) ) { if ( !clazz.isInterface() && !"java.lang.Object".equals( superclazz.getName() ) ) {
addPropertiesFromClass( superclazz ); addPropertiesFromClass( superclazz );
} }
} }
} }
private Iterable<XProperty> getPropertiesFromClassByType(XClass clazz, AccessType accessType) {
final PrivilegedAction<Iterable<XProperty>> action = new PrivilegedAction<Iterable<XProperty>>() {
@Override
public Iterable<XProperty> run() {
return clazz.getDeclaredProperties( accessType.getType() );
}
};
return System.getSecurityManager() != null ? AccessController.doPrivileged( action ) : action.run();
}
private void addFromProperties( private void addFromProperties(
Iterable<XProperty> properties, Iterable<XProperty> properties,
Function<String, String> accessTypeProvider, Function<String, String> accessTypeProvider,