• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 
18 package org.apache.harmony.javax.security.auth.login;
19 
20 import java.security.AccessController;
21 import org.apache.harmony.javax.security.auth.AuthPermission;
22 
23 public abstract class Configuration {
24 
25     // the current configuration
26     private static Configuration configuration;
27 
28     // creates a AuthPermission object with a specify property
29     private static final AuthPermission GET_LOGIN_CONFIGURATION = new AuthPermission(
30             "getLoginConfiguration"); //$NON-NLS-1$
31 
32     // creates a AuthPermission object with a specify property
33     private static final AuthPermission SET_LOGIN_CONFIGURATION = new AuthPermission(
34             "setLoginConfiguration"); //$NON-NLS-1$
35 
36     // Key to security properties, defining default configuration provider.
37     private static final String LOGIN_CONFIGURATION_PROVIDER = "login.configuration.provider"; //$NON-NLS-1$
38 
Configuration()39     protected Configuration() {
40         super();
41     }
42 
getConfiguration()43     public static Configuration getConfiguration() {
44         SecurityManager sm = System.getSecurityManager();
45         if (sm != null) {
46             sm.checkPermission(GET_LOGIN_CONFIGURATION);
47         }
48         return getAccessibleConfiguration();
49     }
50 
51     /**
52      * Reads name of default configuration provider from security.properties,
53      * loads the class and instantiates the provider.<br> In case of any
54      * exception, wraps it with SecurityException and throws further.
55      */
getDefaultProvider()56     private static final Configuration getDefaultProvider() {
57         return new Configuration() {
58 
59 			@Override
60 			public void refresh() {
61 			}
62 
63 			@Override
64 			public AppConfigurationEntry[] getAppConfigurationEntry(
65 					String applicationName) {
66 				return new AppConfigurationEntry[0];
67 			}
68 		};
69     }
70 
71     /**
72      * Shortcut accessor for friendly classes, to skip security checks.
73      * If active configuration was set to <code>null</code>, tries to load a default
74      * provider, so this method never returns <code>null</code>. <br>
75      * This method is synchronized with setConfiguration()
76      */
77     static Configuration getAccessibleConfiguration() {
78         Configuration current = configuration;
79         if (current == null) {
80             synchronized (Configuration.class) {
81                 if (configuration == null) {
82                     configuration = getDefaultProvider();
83                 }
84                 return configuration;
85             }
86         }
87         return current;
88     }
89 
90     public static void setConfiguration(Configuration configuration) {
91         SecurityManager sm = System.getSecurityManager();
92         if (sm != null) {
93             sm.checkPermission(SET_LOGIN_CONFIGURATION);
94         }
95         Configuration.configuration = configuration;
96     }
97 
98     public abstract AppConfigurationEntry[] getAppConfigurationEntry(String applicationName);
99 
100     public abstract void refresh();
101 
102 }
103