细说shiro之三:在独立应用中使用shiro
1. 下载
在非Web环境的独立应用中使用Shiro时,只需要shiro-core组件。
在Maven项目中的依赖配置如下:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- Shiro uses SLF4J for logging. We'll use the 'simple' binding in this example app. See http://www.slf4j.org for more info. -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
</dependency>
特别地!Shiro使用了日志框架slf4j,因此需要对应配置指定的日志实现组件,如:log4j,logback等。
在此,使用slf4j的简单日志实现slf4j-simple。
2. 数据源配置
在Shiro中,Realm定义了访问数据的方式,用来连接不同的数据源,如:LDAP,关系数据库,配置文件等等。
Realm类图:
也就是说,可以根据实际需求及应用的权限管理复杂度灵活选择指定数据源。
在此,以org.apache.shiro.realm.text.IniRealm为例,具体配置如下:
shiro.ini:
# =============================================================================
# Tutorial INI configuration
#
# Usernames/passwords are based on the classic Mel Brooks' film "Spaceballs" :)
# ============================================================================= # -----------------------------------------------------------------------------
# Users and their (optional) assigned roles
# username = password, role1, role2, ..., roleN
# -----------------------------------------------------------------------------
[users]
root = secret, admin
guest = guest, guest
presidentskroob = 12345, president
darkhelmet = ludicrousspeed, darklord, schwartz
lonestarr = vespa, goodguy, schwartz # -----------------------------------------------------------------------------
# Roles with assigned permissions
# roleName = perm1, perm2, ..., permN
# -----------------------------------------------------------------------------
[roles]
admin = *
schwartz = lightsaber:*
goodguy = winnebago:drive:eagle5
选择了数据源,现在开始使用Shiro进行认证和访问授权控制。
3. 认证
在Shiro中,认证即执行用户登录,读取指定Realm连接的数据源,以验证用户身份的有效性与合法性。
String name = "lonestarr";
String pass = "vespa";
Subject currentUser = SecurityUtils.getSubject();
if(!currentUser.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken(name, pass);
token.setRememberMe(true);
try {
currentUser.login(token);
} catch (UnknownAccountException e) {
logger.error(String.format("user not found: %s", name), e);
} catch(IncorrectCredentialsException e) {
logger.error(String.format("user: %s pwd: %s error", name, pass), e);
} catch (ConcurrentAccessException e) {
logger.error(String.format("user has been authenticated: %s", name), e);
} catch (AuthenticationException e) {
logger.error(String.format("account except: %s", name), e);
}
}
logger.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." );
4. 访问授权
在Shiro中,访问授权即验证用户是否具备执行指定操作的权限(角色或权限验证)。
特别地!在执行访问授权验证之前,必须执行用户认证。
String role = "schwartz";
if(currentUser.hasRole(role)) {
logger.info(String.format("用户: %s 属于角色:%s", name, role));
}else{
logger.error(String.format("用户: %s 不属于角色:%s", name, role));
} String perm = "lightsaber:cc";
if(currentUser.isPermitted(perm)) {
logger.info(String.format("用户: %s 拥有权限:%s", name, perm));
}else {
logger.error(String.format("用户:%s 没有权限:%s", name, perm));
}
5. 完整示例
详见:https://git.oschina.net/cchanghui/test-shirocli.git
细说shiro之三:在独立应用中使用shiro的更多相关文章
- 细说shiro之四:在web应用中使用shiro
		官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ... 
- 细说shiro之五:在spring框架中集成shiro
		官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ... 
- WP开发图片保存到独立存储并从独立存储中读取
		需要添加引用命名空间 using System.IO; using System.IO.IsolatedStorage; 1.将图片保存到独立存储空间 using (IsolatedStorageFi ... 
- JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理
		1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ... 
- SpringBoot系列: SpringBoot Web项目中使用Shiro 之二
		==================================Shiro 的加深理解:==================================1. Shiro 和 Spring 系组 ... 
- SpringBoot系列: SpringBoot Web项目中使用Shiro
		注意点有:1. 不要启用 spring-boot-devtools, 如果启用 devtools 后, 不管是热启动还是手工重启, devtools总是试图重新恢复之前的session数据, 很有可能 ... 
- 通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。
		Web Workers API - Web API 接口参考 | MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API ... 
- shiro + jwt 实现 请求头中的 rememberMe 时间限制功能
		前言: 上一篇提出, 通过修改 rememberMe 的编码来实现 rememberMe的功能的设想, 事后我去尝试实现了一番, 发现太麻烦, 还是不要那么做吧. 程序还是要越简单越好. 那功能总是要 ... 
- log4net保存到数据库系列二:独立配置文件中配置log4net
		园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ... 
随机推荐
- Hdoj 1548.A strange lift 题解
			Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ... 
- 转----ui输入测试数据
			jin'tHackChecker黑测工作室 - 专注于软件安全测试技术研究!(www.AutomationQA.com)常用安全测试用例 建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL ... 
- 部署KVM
			1.安装前准备1)服务器或者PC的CPU能支持VT技术2)虚拟机中安装KVM要勾选:处理器:虚拟化Intel VT-x/EPT或AMD-V/RVI(V)[root@localhost ~]# cat ... 
- 【php】php算法的一些实现
			1.生成一定范围内的数组,步长可以设置 function range($step = 10, $max = 100){ if ($step < 1 || $step > $max){ re ... 
- 如何在以太坊上搭建一个Dapp?
			原创: 前哨小兵甲 区块链前哨 昨天 策划|Tina作者|Mahesh Murthy俗话说,实践出真知!对于开发人员来说,最好的学习办法就是亲自动手做一个小项目.所以,接下来我们将会以一个投票程序为例 ... 
- 以太坊、Hyperledger Fabric和Corda,哪个更好?
			原创: Philipp Sandner 区块链前哨 昨天 编译|盖磊编辑|前哨小兵甲区块链前哨导语: 我们分析了 Hyperledger Fabric,R3 Corda 和以太坊这三种分布式账本技术间 ... 
- ArcGIS for qml -添加自由文本
			源码:https://github.com/sueRimn/ArcGIS-for-qml-demos 实现地图上鼠标点击后添加自由文本功能 作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载 ... 
- bzoj1497 最大获利(最大权闭合子图)
			题目链接 思路 对于每个中转站向\(T\)连一条权值为建这个中转站代价的边.割掉这条边表示会建这个中转站. 对于每个人向他的两个中转站连一条权值为\(INF\)的边.然后从\(S\)向这个人连一条权值 ... 
- Mysql DML DCL DDL
			在介绍这些SQL语言之前,先罗列一下mysql的常用数据类型和数据类型修饰,供查询参考 后面的带数字表示此类型的字段长度 数值型: TINYINT 1 ,SMALLINT 2,MEDIUMINT 3 ... 
- 跟我一起用node-express搭建一个小项目(node连接mongodb)[三]
			数据库虽然安装并启动成功了,但我们需要连接数据库后才能使用数据库. 怎么才能在 Node.js 中使用 MongoDB 呢? 我们使用官方提供的 node-mongodb-native 驱动模块,打开 ... 
 
			
		