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