/* * COMSAT * Copyright (C) 2013-2016, Parallel Universe Software Co. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 3.0 * as published by the Free Software Foundation. */ package co.paralleluniverse.fibers.shiro; import co.paralleluniverse.fibers.Fiber; import co.paralleluniverse.fibers.FiberUtil; import co.paralleluniverse.fibers.SuspendExecution; import co.paralleluniverse.strands.SuspendableCallable; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.junit.Test; import static org.junit.Assert.assertTrue; import java.util.concurrent.ExecutionException; /** * @author rodedb */ public class FiberShiroRealmTest { @Test public void testSingleRealm() throws ExecutionException, InterruptedException { final IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro-single-realm.ini"); final SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); final Boolean authed = FiberUtil.runInFiber(new SuspendableCallable<Boolean>() { @Override public Boolean run() throws SuspendExecution, InterruptedException { SecurityUtils.getSubject().login(new UsernamePasswordToken("test", "test")); return SecurityUtils.getSubject().isAuthenticated() && SecurityUtils.getSubject().hasRole("roleA") && SecurityUtils.getSubject().isPermitted("resource:actionA"); } }); assertTrue(authed); } @Test public void testMultiRealm() throws ExecutionException, InterruptedException { final IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro-multi-realm.ini"); final SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); final Boolean authed = FiberUtil.runInFiber(new SuspendableCallable<Boolean>() { @Override public Boolean run() throws SuspendExecution, InterruptedException { SecurityUtils.getSubject().login(new UsernamePasswordToken("test", "test")); return SecurityUtils.getSubject().isAuthenticated() && SecurityUtils.getSubject().hasRole("roleA") && SecurityUtils.getSubject().isPermitted("resource:actionA"); } }); assertTrue(authed); } }