shiro基于权限的控制访问

新建shiro_role_permission.ini文件
[users]
JAVA=123456,role1,role2
PHP=1234567,role1
[roles]
role1=user:select
role2=user:select,user:delete,user:update
/**
 * @author xp
 * @Title: ShiroUtil.java
 * @Package com.xp.shiro.roleshiro
 * @Description: TODO
 * @date 2016年4月24日 下午1:20:35
 * @version V1.0  
 */
package com.xp.shiro.roleshiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UnknownAccountException;
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;

/**
 * @author xp
 * @ClassName: ShiroUtil
 * @Description: 基于角色的访问控制
 * @date 2016年4月24日 下午1:20:35
 *
 */
public class ShiroUtil {

	public static Subject login(String configFile, String username, String password) {
		//读取配置文件建立SecurityManager工厂
		Factory<SecurityManager> factory = new IniSecurityManagerFactory(configFile);

		//建立SecurityManager实例
		SecurityManager securityManager = factory.getInstance();

		//将securityManager和SecurityUtils绑定
		SecurityUtils.setSecurityManager(securityManager);

		//获取当前登陆用户
		Subject currentSubject = SecurityUtils.getSubject();

		UsernamePasswordToken token = null;
		try {
			//更具当前用户的用户名和密码建立token令牌
			token = new UsernamePasswordToken(username, password);
			currentSubject.login(token);//这句话最好写在try外面,用户名密码不对应当立刻抛异常
		} catch (UnknownAccountException e) {
			e.printStackTrace();
			System.out.println("登陆失败");//ComboPooledDataSource
		}
		return currentSubject;
	}

}
/**
 * @author xp
 * @Title: PermissionTest.java
 * @Package com.xp.shiro.roleshiro
 * @Description: TODO
 * @date 2016年4月24日 下午2:20:32
 * @version V1.0  
 */
package com.xp.shiro.roleshiro;

import static org.junit.Assert.*;

import org.apache.shiro.subject.Subject;
import org.junit.Test;

/**
 * @author xp
 * @ClassName: PermissionTest
 * @Description: 基于权限的控制访问
 * @date 2016年4月24日 下午2:20:32
 *
 */
public class PermissionTest {
	
	@Test
	public void testPermission()   {
		Subject subject = ShiroUtil.login("classpath:shiro_role_permission.ini", "JAVA", "123456");
		System.out.println(subject.isPermitted("user:select"));
	}

}
相关文章
相关标签/搜索