2 * Copyright (c) 2015 - 2017 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.aaa.shiro.web.env;
11 import java.util.List;
12 import java.util.concurrent.ExecutionException;
13 import org.apache.shiro.SecurityUtils;
14 import org.apache.shiro.config.Ini;
15 import org.apache.shiro.config.IniSecurityManagerFactory;
16 import org.apache.shiro.mgt.SecurityManager;
17 import org.apache.shiro.util.Factory;
18 import org.apache.shiro.web.env.IniWebEnvironment;
19 import org.opendaylight.aaa.AAAShiroProvider;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.aaa.app.config.rev170619.ShiroConfiguration;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.aaa.app.config.rev170619.shiro.configuration.Main;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.aaa.app.config.rev170619.shiro.configuration.Urls;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
27 * Identical to <code>IniWebEnvironment</code> except the Ini is loaded from
28 * <code>${KARAF_HOME}/etc/shiro.ini</code>.
30 public class KarafIniWebEnvironment extends IniWebEnvironment {
32 private static final Logger LOG = LoggerFactory.getLogger(KarafIniWebEnvironment.class);
34 private static final String MAIN_SECTION_HEADER = "main";
35 private static final String URLS_SECTION_HEADER = "urls";
37 public KarafIniWebEnvironment() {
38 LOG.info("Initializing the Web Environment using {}",
39 KarafIniWebEnvironment.class.getName());
42 private static Ini createIniFromClusteredAppConfig(
43 final ShiroConfiguration shiroConfiguration) {
45 final Ini ini = new Ini();
47 final Ini.Section mainSection = ini.addSection(MAIN_SECTION_HEADER);
48 final List<Main> mains = shiroConfiguration.getMain();
49 for (final Main main : mains) {
50 mainSection.put(main.getPairKey(), main.getPairValue());
53 final Ini.Section urlsSection = ini.addSection(URLS_SECTION_HEADER);
54 final List<Urls> urls = shiroConfiguration.getUrls();
55 for (final Urls url : urls) {
56 urlsSection.put(url.getPairKey(), url.getPairValue());
59 final Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini);
60 final SecurityManager securityManager = factory.getInstance();
61 SecurityUtils.setSecurityManager(securityManager);
69 AAAShiroProvider provider = AAAShiroProvider.getInstanceFuture().get();
71 // Initialize the Shiro environment from clustered-app-config
72 final Ini ini = createIniFromClusteredAppConfig(provider.getShiroConfiguration());
75 } catch (InterruptedException | ExecutionException e) {
76 throw new RuntimeException("Error obtaining AAAShiroProvider", e);