博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro基于角色的访问控制
阅读量:6028 次
发布时间:2019-06-20

本文共 3539 字,大约阅读时间需要 11 分钟。

hot3.png

1.权限的3要素:用户,角色,权限    用户:在shiro中就是subject    角色:权限的集合,一个角色可以有多个权限    角色,用户可以访问的数据或者URL,可进行的操作[增删改查]授权:shiro授权的方式有3种    1.编程式授权:        1.1基于角色的访问控制        1.2基于权限的访问控制    2.注解式授权:    3.jsp标签授权:
/**1.1基于角色的访问控制    shiro_role.ini    [users]    JAVA=123456,role1,role2    PHP=1234567,role1    **/        /** * @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
 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: RoleTest.java * @Package com.xp.shiro.roleshiro * @Description: TODO * @date 2016年4月24日 下午1:32:30 * @version V1.0   */package com.xp.shiro.roleshiro;import static org.junit.Assert.*;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import org.apache.shiro.subject.Subject;import org.junit.Test;/** * @author xp * @ClassName: RoleTest * @Description: TODO * @date 2016年4月24日 下午1:32:30 * */public class RoleTest {    @Test    public void testRole() throws Exception {        Subject subject = ShiroUtil.login("classpath:shiro_role.ini", "JAVA", "123456");        System.out.println(subject.hasRole("role1"));//判断JAVA用户是否拥有role1角色        System.out.println(subject.hasRole("role2"));//判断JAVA用户是否拥有role1角色        System.out.println(subject.hasRole("role3"));//判断JAVA用户是否拥有role1角色                boolean[] hasRoles = subject.hasRoles(Arrays.asList(new String[]{"role1","role2","role3"}));        for (boolean b : hasRoles) {            System.out.println(b);        }    }        @Test    public void testCheck() {        /*如果没有角色会抛UnauthorizedException异常         * org.apache.shiro.authz.UnauthorizedException: Subject does not have role [role3]    at org.apache.shiro.authz.ModularRealmAuthorizer.checkRole(ModularRealmAuthorizer.java:421)         */        Subject subject = ShiroUtil.login("classpath:shiro_role.ini", "JAVA", "123456");        try {            //subject.checkRole("role21");            //subject.checkRoles(Arrays.asList(new String[] { "role1", "role2","role3" }));            subject.checkRoles("role1","role2","role3");        } catch (UnauthorizedException e) {            e.printStackTrace();        }    }    }

135915_kfKy_2253438.jpg

140107_AIi1_2253438.jpg

转载于:https://my.oschina.net/u/2253438/blog/665280

你可能感兴趣的文章
[裴礼文数学分析中的典型问题与方法习题参考解答]5.1.16
查看>>
HttpWebResponse类
查看>>
基于VLC的视频播放器
查看>>
福州大学第十一届程序设计竞赛
查看>>
Android sendToTarget
查看>>
.aanva
查看>>
java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException
查看>>
atitit.高级编程语言的特性 and 未来趋势与进化.doc
查看>>
该项目的建设maven片:4.协调和依赖,spring依赖注入demo
查看>>
jQuery 弹出窗口的形式一直是具体案件的中心
查看>>
SQL中CONVERT转化函数的用法
查看>>
ASP.NET异步处理
查看>>
grunt安装
查看>>
虚拟机类加载机制
查看>>
BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法
查看>>
yourtour的几种链接
查看>>
2015-8-10工作日志
查看>>
POI使用汇总
查看>>
Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)
查看>>
学习pthreads,创建和终止多线程
查看>>