+ add security manager checks to avoid the creation of inner privileged action classes
This commit is contained in:
parent
04b619ebfb
commit
0179c66d2a
|
|
@ -54,12 +54,15 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy {
|
|||
throw new BeanInstantiationException(clazz, "Specified class is an interface");
|
||||
}
|
||||
try {
|
||||
if (System.getSecurityManager() != null) {
|
||||
constructorToUse = AccessController.doPrivileged(new PrivilegedExceptionAction<Constructor>() {
|
||||
|
||||
public Constructor run() throws Exception {
|
||||
return clazz.getDeclaredConstructor((Class[]) null);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
constructorToUse = clazz.getDeclaredConstructor((Class[]) null);
|
||||
}
|
||||
beanDefinition.resolvedConstructorOrFactoryMethod = constructorToUse;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
|
@ -127,14 +130,19 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy {
|
|||
Object factoryBean, final Method factoryMethod, Object[] args) {
|
||||
|
||||
try {
|
||||
// It's a static method if the target is null.
|
||||
if (System.getSecurityManager() != null) {
|
||||
AccessController.doPrivileged(new PrivilegedAction<Object>() {
|
||||
|
||||
public Object run() {
|
||||
ReflectionUtils.makeAccessible(factoryMethod);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
ReflectionUtils.makeAccessible(factoryMethod);
|
||||
}
|
||||
|
||||
// It's a static method if the target is null.
|
||||
return factoryMethod.invoke(factoryBean, args);
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
|
|
@ -151,5 +159,4 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy {
|
|||
"Factory method [" + factoryMethod + "] threw exception", ex.getTargetException());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue