shiro-realm2
来源:互联网 发布:主数据和元数据区别 编辑:程序博客网 时间:2024/06/11 07:50
http://jinnianshilongnian.iteye.com/blog/2019547
relam 不仅仅可以配置一个,还可以配置多个,其实昨天我们跟踪的时候已经发现了这个问题哦~
shiro.ini 文件配置中,我们可以配置很多的
[main]#声明一个realmmyRealm1=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm1myRealm2=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm2#指定securityManager的realms实现securityManager.realms=$myRealm1,$myRealm2
securityManager会按照realms指定的顺序进行身份认证。此处我们使用显示指定顺序的方式指定了Realm的顺序,如果删除 “securityManager.realms=$myRealm1,$myRealm2”
,
那么securityManager会按照realm声明的顺序进行使用(即无需设置realms属性,其会自动发现),当我们显示指定realm后,其他没有指定realm将被忽略,如“securityManager.realms=$myRealm1”
,那么myRealm2不会被自动设置进去。这个昨天在初始化实例和设置管家属性那里可以知道所有然。
shiro-realm的继承关系图
上面的这些实现写的还是比较的复杂的,里面的缓存管理等等,花时间仔细去看还是很有收获的。使用了ConcurrentHashMap< String, Cache>(),的实现
以后一般继承AuthorizingRealm(授权)即可;其继承了AuthenticatingRealm(即身份验证),而且也间接继承了CachingRealm(带有缓存实现)。其中主要默认实现如下:
org.apache.shiro.realm.text.IniRealm:[users]部分指定用户名/密码及其角色;[roles]部分指定角色即权限信息;
org.apache.shiro.realm.text.PropertiesRealm: user.username=password,role1,role2指定用户名/密码及其角色;role.role1=permission1,permission2指定角色及权限信息;
org.apache.shiro.realm.jdbc.JdbcRealm:
通过sql查询相应的信息,如“select password from users where username = ?”获取用户密码,
“select password, password_salt from users where username = ?”获取用户密码及盐;
“select role_name from user_roles where username = ?”获取用户角色;
“select permission from roles_permissions where role_name = ?”获取角色对应的权限信息;也可以调用相应的api进行自定义sql;
配置文件而已其他的都一样的!可以自己去看看JDBC的实现
[main]jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmdataSource=com.alibaba.druid.pool.DruidDataSourcedataSource.driverClassName=com.mysql.jdbc.DriverdataSource.url=jdbc:mysql://localhost:3306/shirodataSource.username=rootdataSource.password=wangjdbcRealm.dataSource=$dataSourcesecurityManager.realms=$jdbcRealm
drop database if exists shiro;create database shiro;use shiro;create table users ( id bigint auto_increment, username varchar(100), password varchar(100), password_salt varchar(100), constraint pk_users primary key(id)) charset=utf8 ENGINE=InnoDB;create unique index idx_users_username on users(username);create table user_roles( id bigint auto_increment, username varchar(100), role_name varchar(100), constraint pk_user_roles primary key(id)) charset=utf8 ENGINE=InnoDB;create unique index idx_user_roles on user_roles(username, role_name);create table roles_permissions( id bigint auto_increment, role_name varchar(100), permission varchar(100), constraint pk_roles_permissions primary key(id)) charset=utf8 ENGINE=InnoDB;create unique index idx_roles_permissions on roles_permissions(role_name, permission);insert into users(username,password)values('zhang','123');
- shiro-realm2
- shiro
- shiro
- Shiro
- shiro
- shiro
- shiro
- shiro
- Shiro
- Shiro
- shiro
- shiro
- shiro
- shiro
- shiro
- shiro
- shiro
- Shiro
- Xshell修改默认会话目录以及会话导入和导出
- 部署分布式kubernetes(v1.3.1)-centos7
- 【腾讯Bugly干货分享】程序员们也该知道的事——“期权和股票”
- APP测试实用指南
- 删除null的列是is不是等于号
- shiro-realm2
- iOS 保持界面流畅的技巧
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计
- mapreduce的输入格式详解
- 命名空间及自动加载函数的使用
- 俞军跟我聊了三个小时产品(1):用户不是人,是需求的集合
- 翻译:走出类加载器迷宫
- android同时使用wifi和以太网
- Excel个人所得税简洁计算公式