src/share/classes/java/util/logging/MemoryHandler.java
Print this page
@@ -23,10 +23,13 @@
* questions.
*/
package java.util.logging;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
/**
* <tt>Handler</tt> that buffers requests in a circular buffer in memory.
* <p>
* Normally this <tt>Handler</tt> simply stores incoming <tt>LogRecords</tt>
* into its memory buffer and discards earlier records. This buffering
@@ -92,36 +95,38 @@
private int size;
private Handler target;
private LogRecord buffer[];
int start, count;
- // Private method to configure a MemoryHandler from LogManager
+ // Private PrivilegedAction to configure a MemoryHandler from LogManager
// properties and/or default values as specified in the class
// javadoc.
- private void configure() {
+ private class ConfigureAction implements PrivilegedAction<Void> {
+ @Override
+ public Void run() {
LogManager manager = LogManager.getLogManager();
- String cname = getClass().getName();
+ String cname = MemoryHandler.this.getClass().getName();
pushLevel = manager.getLevelProperty(cname +".push", Level.SEVERE);
size = manager.getIntProperty(cname + ".size", DEFAULT_SIZE);
if (size <= 0) {
size = DEFAULT_SIZE;
}
setLevel(manager.getLevelProperty(cname +".level", Level.ALL));
setFilter(manager.getFilterProperty(cname +".filter", null));
setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
+ return null;
+ }
}
/**
* Create a <tt>MemoryHandler</tt> and configure it based on
* <tt>LogManager</tt> configuration properties.
*/
public MemoryHandler() {
- sealed = false;
- configure();
- sealed = true;
-
+ AccessController.doPrivileged(new ConfigureAction(),
+ null, LogManager.controlPermission);
LogManager manager = LogManager.getLogManager();
String handlerName = getClass().getName();
String targetName = manager.getProperty(handlerName+".target");
if (targetName == null) {
throw new RuntimeException("The handler " + handlerName
@@ -162,13 +167,12 @@
throw new NullPointerException();
}
if (size <= 0) {
throw new IllegalArgumentException();
}
- sealed = false;
- configure();
- sealed = true;
+ AccessController.doPrivileged(new ConfigureAction(),
+ null, LogManager.controlPermission);
this.target = target;
this.pushLevel = pushLevel;
this.size = size;
init();
}