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');
0 0
原创粉丝点击