Shiro浅显理解
来源:互联网 发布:mysql攻击全攻略 编辑:程序博客网 时间:2024/06/16 01:24
Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入
Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
用户赋予角色。角色拥有权限
添加依赖shiro-core
shiro.ini:
[users]
java=123 (用户名=密码)
java=123,admin(用户名=密码,角色)
[roles]
role1=user:select(role1角色拥有user:select权限)
teacher
[main]
authc.loginUrl=/login //这个是跳转到登录界面
roles.unauthourized=/unanthorized.jsp //用户认证
perms.unauthourized=//unanthorized.jsp //权限认证
[urls]
/login=anon //不用权限,不需要认证
/admin=authc //需要进行身份认证,跳转到拦截器,身份认证通过就能访问
/student=roles[teacher] //roles.unauthourized=/unanthorized.jsp //用户认证
currentUser.hasRole("Role1");
currentUser.isPermitted("user:select");
currentUser.checkPermission("user: select");
角色是权限的集合,用户是Subject,Subject currentUser
所有的请求都会被shiro拦截跳转到指定链接 /*
- public void testHelloworld() {
- //1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
- Factory<org.apache.shiro.mgt.SecurityManager> factory =
- new IniSecurityManagerFactory("classpath:shiro.ini");
- //2、得到SecurityManager实例 并绑定给SecurityUtils
- org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
- SecurityUtils.setSecurityManager(securityManager);
- //3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
- Subject subject = SecurityUtils.getSubject();
- UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
- try {
- //4、登录,即身份验证
- subject.login(token);
- } catch (AuthenticationException e) {
- //5、身份验证失败
- }
- Assert.assertEquals(true, subject.isAuthenticated()); //断言用户已经登录
- //6、退出
- subject.logout();
- }
Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。如我们之前的ini配置方式将使用org.apache.shiro.realm.text.IniRealm。
- public class MyRealm1 implements Realm {
@RequiresAuthentication
@RequeresPermissions@RequireRoles
- Shiro浅显理解
- eTom学习浅显理解
- android Context浅显理解
- UITableView 的浅显理解
- 傅里叶变换浅显理解
- ThreadLocal的直观浅显理解
- "高内聚,低耦合"浅显理解
- 浅显理解 Python 闭包
- 对于递归的浅显理解
- socket浅显的自我理解
- 对MQ的浅显理解
- 对Ajax的一些浅显理解
- ADO.net浅显理解以及连接数据库
- 浅显易懂的理解java中的接口
- ASP.NET MVP架构的浅显理解
- 浅显理解之c语言的声明
- 关于移动设备系统的浅显理解
- HTML5标签学习以及个人浅显理解
- 0x开头的颜色值和#开头的颜色值的区别以及转化
- Qt4.8.6详细安装步骤
- iOS 安装cocoapods ruby 环境问题
- STM32系统学习——RCC(使用HSE/HSI配置时钟)
- bootstrap-table-demo说明
- Shiro浅显理解
- docker离线安装
- Java 程序连接 Informix 数据库方法实例介绍
- 关于input为color时绑定对应内容改变相应颜色
- scikit-learn常用的一些函数及在实战中的用法
- hive left join 条件on 和 where 的放置
- 五十种编程语言简介(1)
- (译) 在IOS中实现导入&导出文档
- js--打卡--11.27 toString方法的改造。