< prev index next >

src/java.base/share/classes/javax/security/auth/login/Configuration.java

Print this page




 212      * @return the login Configuration.  If a Configuration object was set
 213      *          via the {@code Configuration.setConfiguration} method,
 214      *          then that object is returned.  Otherwise, a default
 215      *          Configuration object is returned.
 216      *
 217      * @exception SecurityException if the caller does not have permission
 218      *                          to retrieve the Configuration.
 219      *
 220      * @see #setConfiguration
 221      */
 222     public static Configuration getConfiguration() {
 223 
 224         SecurityManager sm = System.getSecurityManager();
 225         if (sm != null)
 226             sm.checkPermission(new AuthPermission("getLoginConfiguration"));
 227 
 228         synchronized (Configuration.class) {
 229             if (configuration == null) {
 230                 String config_class = null;
 231                 config_class = AccessController.doPrivileged
 232                     (new PrivilegedAction<String>() {
 233                     public String run() {
 234                         return java.security.Security.getProperty
 235                                     ("login.configuration.provider");
 236                     }
 237                 });
 238                 if (config_class == null) {
 239                     config_class = "sun.security.provider.ConfigFile";
 240                 }
 241 
 242                 try {
 243                     final String finalClass = config_class;
 244                     Configuration untrustedImpl = AccessController.doPrivileged(
 245                             new PrivilegedExceptionAction<Configuration>() {
 246                                 public Configuration run() throws ClassNotFoundException,
 247                                         InstantiationException,
 248                                         IllegalAccessException {
 249                                     Class<? extends Configuration> implClass = Class.forName(
 250                                             finalClass, false,
 251                                             Thread.currentThread().getContextClassLoader()
 252                                     ).asSubclass(Configuration.class);
 253                                     return implClass.newInstance();
 254                                 }
 255                             });
 256                     AccessController.doPrivileged(
 257                             new PrivilegedExceptionAction<Void>() {
 258                                 public Void run() {
 259                                     setConfiguration(untrustedImpl);
 260                                     return null;
 261                                 }
 262                             }, Objects.requireNonNull(untrustedImpl.acc)
 263                     );
 264                 } catch (PrivilegedActionException e) {
 265                     Exception ee = e.getException();
 266                     if (ee instanceof InstantiationException) {
 267                         throw (SecurityException) new
 268                             SecurityException
 269                                     ("Configuration error:" +
 270                                      ee.getCause().getMessage() +
 271                                      "\n").initCause(ee.getCause());
 272                     } else {
 273                         throw (SecurityException) new
 274                             SecurityException
 275                                     ("Configuration error: " +
 276                                      ee.toString() +
 277                                      "\n").initCause(ee);




 212      * @return the login Configuration.  If a Configuration object was set
 213      *          via the {@code Configuration.setConfiguration} method,
 214      *          then that object is returned.  Otherwise, a default
 215      *          Configuration object is returned.
 216      *
 217      * @exception SecurityException if the caller does not have permission
 218      *                          to retrieve the Configuration.
 219      *
 220      * @see #setConfiguration
 221      */
 222     public static Configuration getConfiguration() {
 223 
 224         SecurityManager sm = System.getSecurityManager();
 225         if (sm != null)
 226             sm.checkPermission(new AuthPermission("getLoginConfiguration"));
 227 
 228         synchronized (Configuration.class) {
 229             if (configuration == null) {
 230                 String config_class = null;
 231                 config_class = AccessController.doPrivileged
 232                     (new PrivilegedAction<>() {
 233                     public String run() {
 234                         return java.security.Security.getProperty
 235                                     ("login.configuration.provider");
 236                     }
 237                 });
 238                 if (config_class == null) {
 239                     config_class = "sun.security.provider.ConfigFile";
 240                 }
 241 
 242                 try {
 243                     final String finalClass = config_class;
 244                     Configuration untrustedImpl = AccessController.doPrivileged(
 245                             new PrivilegedExceptionAction<>() {
 246                                 public Configuration run() throws ClassNotFoundException,
 247                                         InstantiationException,
 248                                         IllegalAccessException {
 249                                     Class<? extends Configuration> implClass = Class.forName(
 250                                             finalClass, false,
 251                                             Thread.currentThread().getContextClassLoader()
 252                                     ).asSubclass(Configuration.class);
 253                                     return implClass.newInstance();
 254                                 }
 255                             });
 256                     AccessController.doPrivileged(
 257                             new PrivilegedExceptionAction<>() {
 258                                 public Void run() {
 259                                     setConfiguration(untrustedImpl);
 260                                     return null;
 261                                 }
 262                             }, Objects.requireNonNull(untrustedImpl.acc)
 263                     );
 264                 } catch (PrivilegedActionException e) {
 265                     Exception ee = e.getException();
 266                     if (ee instanceof InstantiationException) {
 267                         throw (SecurityException) new
 268                             SecurityException
 269                                     ("Configuration error:" +
 270                                      ee.getCause().getMessage() +
 271                                      "\n").initCause(ee.getCause());
 272                     } else {
 273                         throw (SecurityException) new
 274                             SecurityException
 275                                     ("Configuration error: " +
 276                                      ee.toString() +
 277                                      "\n").initCause(ee);


< prev index next >