aboutsummaryrefslogtreecommitdiffstats
path: root/shiro/src/test/java/org/onap/aaf/cadi/shiro/test/StandAloneTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'shiro/src/test/java/org/onap/aaf/cadi/shiro/test/StandAloneTest.java')
-rw-r--r--shiro/src/test/java/org/onap/aaf/cadi/shiro/test/StandAloneTest.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/shiro/src/test/java/org/onap/aaf/cadi/shiro/test/StandAloneTest.java b/shiro/src/test/java/org/onap/aaf/cadi/shiro/test/StandAloneTest.java
new file mode 100644
index 0000000..da026dd
--- /dev/null
+++ b/shiro/src/test/java/org/onap/aaf/cadi/shiro/test/StandAloneTest.java
@@ -0,0 +1,147 @@
+ /*
+ * 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.onap.aaf.cadi.shiro.test;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.IncorrectCredentialsException;
+import org.apache.shiro.authc.LockedAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.config.Ini;
+import org.apache.shiro.config.Ini.Section;
+import org.apache.shiro.config.IniSecurityManagerFactory;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.Factory;
+import org.onap.aaf.cadi.shiro.AAFRealm;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class StandAloneTest {
+
+ /**
+ * Simple Quickstart application, from Shiro, showing how to use Shiro's API.
+ *
+ * @since 0.9 RC2
+ */
+ private static final transient Logger log = LoggerFactory.getLogger(StandAloneTest.class);
+
+ public static void main(String[] args) {
+ if(args.length<3) {
+ System.out.println("Usage: java StandAloneTest fqi ns passwd");
+ } else {
+
+ String user = args[0];
+ String ns = args[1];
+ String pass = args[2];
+
+ // The easiest way to create a Shiro SecurityManager with configured
+ // realms, users, roles and permissions is to use the simple INI config.
+ // We'll do that by using a factory that can ingest a .ini file and
+ // return a SecurityManager instance:
+
+ Ini ini = new Ini();
+ Section section = ini.addSection("main");
+ section.put("aafRealm", "org.onap.aaf.cadi.shiro.AAFRealm");
+ section.put("securityManager.realms","$aafRealm");
+ /*
+ * Equivalent to shiro.ini
+ *
+ * [main]
+ * aafRealm=org.onap.aaf.cadi.shiro.AAFRealm
+ * securityManager.realms=$aafRealm
+ */
+ Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini);
+
+ // Alternative: Use the shiro.ini file at the root of the classpath
+ // (file: and url: prefixes load from files and urls respectively):
+ // Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
+ SecurityManager securityManager = factory.getInstance();
+
+ // for this simple example quickstart, make the SecurityManager
+ // accessible as a JVM singleton. Most applications wouldn't do this
+ // and instead rely on their container configuration or web.xml for
+ // webapps. That is outside the scope of this simple quickstart, so
+ // we'll just do the bare minimum so you can continue to get a feel
+ // for things.
+ SecurityUtils.setSecurityManager(securityManager);
+
+ // Now that a simple Shiro environment is set up, let's see what you can do:
+
+ // get the currently executing user:
+ Subject currentUser = SecurityUtils.getSubject();
+
+ // Do some stuff with a Session (no need for a web or EJB container!!!)
+ Session session = currentUser.getSession();
+ session.setAttribute("someKey", "aValue");
+ String value = (String) session.getAttribute("someKey");
+ if (value.equals("aValue")) {
+ log.info("Retrieved the correct value! [" + value + "]");
+ }
+
+ for(int i=0;i<3;++i) {
+ // let's login the current user so we can check against roles and permissions:
+ if (!currentUser.isAuthenticated()) {
+ UsernamePasswordToken token = new UsernamePasswordToken(user,pass);
+ // UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
+ token.setRememberMe(true);
+ try {
+ currentUser.login(token);
+ } catch (UnknownAccountException uae) {
+ log.info("There is no user with username of " + token.getPrincipal());
+ } catch (IncorrectCredentialsException ice) {
+ log.info("Password for account " + token.getPrincipal() + " was incorrect!");
+ } catch (LockedAccountException lae) {
+ log.info("The account for username " + token.getPrincipal() + " is locked. " +
+ "Please contact your administrator to unlock it.");
+ }
+ // ... catch more exceptions here (maybe custom ones specific to your application?
+ catch (AuthenticationException ae) {
+ //unexpected condition? error?
+ // AT&T doesn't allow specifics
+ log.info(ae.getMessage());
+ }
+ }
+
+ // Uncomment following to test calls after Cache is Cleared
+ // AAFRealm.Singleton.singleton().authz.clearAll();
+
+ //say who they are:
+ //print their identifying principal (in this case, a username):
+ log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
+
+ //test NS Write Access
+ String msg = String.format("You are %s in role %s.admin",
+ currentUser.hasRole(ns+".admin")?"":"not",
+ ns);
+ log.info(msg);
+
+ //test a typed permission (not instance-level)
+ msg = String.format("You %s have write access into NS %s",
+ currentUser.isPermitted(ns+".access|*|*")?"":"do not",
+ ns);
+ log.info(msg);
+ }
+ //all done - log out!
+ currentUser.logout();
+ }
+ }
+}