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>