org.apache.activemq.shiro.env.IniEnvironment Maven / Gradle / Ivy
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.shiro.env;
import org.apache.activemq.shiro.authz.ActiveMQPermissionResolver;
import org.apache.activemq.shiro.mgt.DefaultActiveMqSecurityManager;
import org.apache.shiro.ShiroException;
import org.apache.shiro.config.ConfigurationException;
import org.apache.shiro.config.Ini;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.env.DefaultEnvironment;
import org.apache.shiro.io.ResourceUtils;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.util.Initializable;
import org.apache.shiro.util.LifecycleUtils;
import java.util.Map;
/**
* @since 5.10.0
*/
public class IniEnvironment extends DefaultEnvironment implements Initializable {
private Ini ini;
private String iniConfig;
private String iniResourePath;
public IniEnvironment() {
}
public IniEnvironment(Ini ini) {
this.ini = ini;
init();
}
public IniEnvironment(String iniConfig) {
Ini ini = new Ini();
ini.load(iniConfig);
this.ini = ini;
init();
}
public void setIni(Ini ini) {
this.ini = ini;
}
public void setIniConfig(String config) {
this.iniConfig = config;
}
public void setIniResourcePath(String iniResourcePath) {
this.iniResourePath = iniResourcePath;
}
@Override
public void init() throws ShiroException {
//this.environment and this.securityManager are null. Try Ini config:
Ini ini = this.ini;
if (ini != null) {
apply(ini);
}
if (this.objects.isEmpty() && this.iniConfig != null) {
ini = new Ini();
ini.load(this.iniConfig);
apply(ini);
}
if (this.objects.isEmpty() && this.iniResourePath != null) {
ini = new Ini();
ini.loadFromPath(this.iniResourePath);
apply(ini);
}
if (this.objects.isEmpty()) {
if (ResourceUtils.resourceExists("classpath:shiro.ini")) {
ini = new Ini();
ini.loadFromPath("classpath:shiro.ini");
apply(ini);
}
}
if (this.objects.isEmpty()) {
String msg = "Configuration error. All heuristics for acquiring Shiro INI config " +
"have been exhausted. Ensure you configure one of the following properties: " +
"1) ini 2) iniConfig 3) iniResourcePath and the Ini sections are not empty.";
throw new ConfigurationException(msg);
}
LifecycleUtils.init(this.objects.values());
}
protected void apply(Ini ini) {
if (ini != null && !ini.isEmpty()) {
Map objects = createObjects(ini);
this.ini = ini;
this.objects.clear();
this.objects.putAll(objects);
}
}
private Map createObjects(Ini ini) {
IniSecurityManagerFactory factory = new IniSecurityManagerFactory(ini) {
@Override
protected SecurityManager createDefaultInstance() {
return new DefaultActiveMqSecurityManager();
}
@Override
protected Realm createRealm(Ini ini) {
IniRealm realm = (IniRealm)super.createRealm(ini);
realm.setPermissionResolver(new ActiveMQPermissionResolver());
return realm;
}
};
factory.getInstance(); //trigger beans creation
return factory.getBeans();
}
}