新建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")); } }