s首先要将读取文件的方法封装,只需要传入文件,用户名和密码即可登陆
package com.java.shiro.common;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class ShiroUtil {
	public static Subject login(String configFile, String userName, String password) {
		// 读取shiro配置文件,初始化SecurityManager工厂
		Factory<SecurityManager> factory = new IniSecurityManagerFactory(configFile);
		// 获取securityManager实例
		SecurityManager securityManager = factory.getInstance();
		// 把securityManager实例绑定到SecurityUtils
		SecurityUtils.setSecurityManager(securityManager);
		// 得到当前执行的用户
		Subject currentUser = SecurityUtils.getSubject();
		// 创建用户令牌,用户名/密码
		UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
		try {
			// 身份认证
			currentUser.login(token);
			System.out.println("登陆成功");
		} catch (AuthenticationException e) {
			e.printStackTrace();
			System.out.println("身份认证失败");
		}
		// 退出
		return currentUser;
	}
}
1,判断角色,首先配置角色ini文件
文件名:shiro_role.ini
[users]
java1234=1234,role1,role2
jack=123,role1
*****测试方法
package com.java.shiro;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import com.java.shiro.common.ShiroUtil;
public class RoleTest {
	@Test
	public void testHasRole() {
		Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini", "java1234", "1234");
//		System.out.println(currentUser.hasRole("role2")?"有role2":"没有role2");
	
//		boolean[] booleans = currentUser.hasRoles(Arrays.asList("role1","role2","role3"));
//		for (boolean b : booleans) {
//			System.out.println(b);
//		}
		
		System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2"))?"有两个权限":"不足两个权限");
		//判断完之后要加logout()
				currentUser.logout();
	}
	
	@Test
	public void testCheckRole() {
		Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini", "java1234", "1234");
//		System.out.println(currentUser.hasRole("role2")?"有role2":"没有role2");
	
//		boolean[] booleans = currentUser.hasRoles(Arrays.asList("role1","role2","role3"));
//		for (boolean b : booleans) {
//			System.out.println(b);
//		}
//		currentUser.checkRole("role8");
		//传一个数组集合,都有不报错,没有其中一个或多个都会报错
		currentUser.checkRoles(Arrays.asList("role1","role2"));
		//传多个字符串
		currentUser.checkRoles("role1","role2","role3");
//		System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2"))?"有两个权限":"不足两个权限");
		//判断完之后要加logout()
		currentUser.logout();
	}
	
	
}
2,权限判断,首先配置角色ini文件
文件名:shiro_permission.ini
[users]
java1234=1234,role1,role2
jack=123,role1
[roles]
role1=user:select
role2=user:select,user:add,user:delete
*****测试方法
package com.java.shiro;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import com.java.shiro.common.ShiroUtil;
public class PermissionTest {
	@Test
	public void testIsPermitted() {
		Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "java1234", "1234");
		//判断是否有user的select权限
		boolean result  = currentUser.isPermitted("user:update");
		////判断是否有user的后面的权限,返回boolean数组
		boolean [] results = currentUser.isPermitted("user:select","user:add","user:update");
		for (boolean b : results) {
			System.out.println(b+"权限");
		}
		//全有返回true,不全有返回false
		boolean all = currentUser.isPermittedAll("user:add","user:update");
		System.out.println(all+"权限");
		
//		System.out.println(result+"权限");
		
		//判断完之后要加logout()
		currentUser.logout();
		
		
	}
	
	
	
	@Test
	public void testCheckPermitted() {
		Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "java1234", "1234");
		//有权限无返回,没权限抛出异常
		currentUser.checkPermission("user:add");
		//权限都有无返回,不全有抛出异常
		currentUser.checkPermissions("user:update","user:select");
		
		
	
		//判断完之后要加logout()
//		currentUser.logout();
		
		
	}
}
原文:http://www.cnblogs.com/1736gerr/p/6870115.html