src/share/classes/java/util/logging/StreamHandler.java
Print this page
@@ -25,10 +25,12 @@
package java.util.logging;
import java.io.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* Stream based logging <tt>Handler</tt>.
* <p>
* This is primarily intended as a base class or support class to
@@ -75,16 +77,18 @@
public class StreamHandler extends Handler {
private OutputStream output;
private boolean doneHeader;
private volatile Writer writer;
- // Private method to configure a StreamHandler from LogManager
+ // Private PrivilegedAction to configure a StreamHandler 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 = StreamHandler.this.getClass().getName();
setLevel(manager.getLevelProperty(cname +".level", Level.INFO));
setFilter(manager.getFilterProperty(cname +".filter", null));
setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
try {
@@ -95,34 +99,38 @@
} catch (Exception ex2) {
// doing a setEncoding with null should always work.
// assert false;
}
}
+ return null;
+ }
}
/**
* Create a <tt>StreamHandler</tt>, with no current output stream.
*/
public StreamHandler() {
- sealed = false;
- configure();
- sealed = true;
+ AccessController.doPrivileged(new ConfigureAction(), null, LogManager.controlPermission);
}
/**
* Create a <tt>StreamHandler</tt> with a given <tt>Formatter</tt>
* and output stream.
* <p>
* @param out the target output stream
* @param formatter Formatter to be used to format output
*/
- public StreamHandler(OutputStream out, Formatter formatter) {
- sealed = false;
- configure();
+ public StreamHandler(final OutputStream out, final Formatter formatter) {
+ AccessController.doPrivileged(new ConfigureAction() {
+ @Override
+ public Void run() {
+ super.run();
setFormatter(formatter);
setOutputStream(out);
- sealed = true;
+ return null;
+ }
+ }, null, LogManager.controlPermission);
}
/**
* Change the output stream.
* <P>