Shiro基础功能之入门介绍

2018-02-27 10:59:05来源:oschina作者:久违了java人点击

分享

任何介绍都不如官网来的实在:http://shiro.apache.org


本文仅是介绍shiro的简单入门,配置说明


1、mavn依赖



org.apache.shiro
shiro-core
1.2.3




com.mchange
c3p0
0.9.5.2



commons-logging
commons-logging
1.2

2、配置文件

shiro.ini


[users]
wugong=111111
admin=111111

jdbc_realm.ini


[main]
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://192.168.1.148:3306/vip
dataSource.user=root
dataSource.password=root
jdbcRealm.dataSource=$dataSource
securityManager.realms=$jdbcRealm

shiro_role.ini


[users]
wugong=111111,admin,super
admin=111111,admin
super=111111,super
java1234=111111,role1,role2
jack=111111,role1

shiro_permission.ini


[users]
wugong=111111,admin,super
admin=111111,admin
super=111111,super
[roles]
admin=user:select
super=user:add,user:update,user:delete
3、测试

shiro.ini对应的测试


@Test
public void shiroHello(){
Factory factory = new IniSecurityManagerFactory("classpath:shiro/shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject currentUser = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("wugong","111111");
try {
currentUser.login(token);
System.out.println("身份认证成功");
} catch (AuthenticationException e) {
e.printStackTrace();
}
currentUser.logout();
System.out.println("已经退出");
}

jdbc_realm.ini


@Test
public void shiroJdbcTest(){
//
Subject currentUser = ShiroUtil.login("classpath:shiro/jdbc_realm.ini","wugong","123456");
}

shiro_role.ini


说明:#shiro功能演示的数据库 #如果使用jdbc_realm功能,则必须要保证数据库中存在 users表,并且该表中必须要存在userName password字段


#shiro功能演示的数据库
#如果使用jdbc_realm功能,则必须要保证数据库中存在 users表,并且该表中必须要存在userName password字段
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`userName` varchar(200) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', 'wugong', '123456');
private static String shiroIniPath = "classpath:shiro/shiro_role.ini";
@Test
public void shiroRoleTest() {
// shiroRoleHasRole("wugong","111111","admin");
shiroRoleHasRoles("wugong", "111111", "admin", "super", "no");
shiroRoleHasAllRoles("wugong", "111111", "admin", "super", "no");
shiroRoleHasAllRoles("wugong", "111111", "admin", "super");
}
private void shiroRoleHasRole(String userName, String password, String role) {
Subject currentUser = ShiroUtil.login(shiroIniPath, userName, password);
System.out.println(currentUser.hasRole(role) ? (userName + "账号有" + role + "权限") : (userName + "账号没有" + role + "权限"));
}
/**
* 多个role验证
*
* @Author wugong
* @Date 2018/2/26 10:16
* @Modify if true,please enter your name or update time
* @params
*/
private void shiroRoleHasRoles(String userName, String password, String... roles) {
Subject currentUser = ShiroUtil.login(shiroIniPath, userName, password);
List roleList = Arrays.asList(roles);
boolean results[] = currentUser.hasRoles(roleList);
for (int i = 0; i < results.length; i++) {
System.out.println(results[i] ? (userName + "账号有" + roleList.get(i) + "权限") : (userName + "账号没有" + roleList.get(i) + "权限"));
}
}
/**
* 全部权限的验证
*
* @Author wugong
* @Date 2018/2/26 10:28
* @Modify if true,please enter your name or update time
* @params
*/
private void shiroRoleHasAllRoles(String userName, String password, String... roles) {
Subject currentUser = ShiroUtil.login(shiroIniPath, userName, password);
StringBuffer roleStr = new StringBuffer();
for (int i = 0; i < roles.length; i++) {
String role = roles[i];
roleStr.append(role);
if (iroleStr.append(",");
}
System.out.println(currentUser.hasAllRoles(Arrays.asList(roles)) ? (userName + "账号有全部" + roleStr + "权限") : (userName + "账号不全有" + roleStr + "权限"));
}

shiro_permission.ini


下载地址:

项目下载地址:https://pan.baidu.com/s/1gfQ5F7l 密码:k2ba


本项目首次搭建是用于ssm简单功能
1、ssm使用的数据库配置
jdbc.properties
1.1、ssm包含基本的数据库表CRUD
1.2、包含aop事务
1.3、自定义aop controller方法拦截
com.jie.common.OperationLogger
com.jie.common.SysLogAspect
com.jie.common.ClassParam
1.4、mybatis的一对多、一对一简单使用说明
2、shiro入门级使用教程使用的数据库配置
jdbc_realm.ini
2.1、身份认证
2.1、读取配置的简单使用
例子:com.jie.shiro.ShiroHello.shiroHello
2.2、数据库用户读取 Realm&JDBC Reaml
例子:com.jie.shiro.ShiroJdbcTest
2.2、权限认证(授权)
2.2.1、编程式授权
2.2.1.1 基于角色的访问控制
2.2.1.2 基于权限的访问控制

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台