Shiro 笔记
功能
认证
授权
加密
session 管理
认证
Subject 是一个与系统交互的实体,可以是人,也可以是其他等
调用 SecurityUtils.getSubject()返回当前Subject,即当前用户
// 创建 Realm
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
// 将 Realm 给 SecurityManager
SecurityManager securityManager = new DefaultSecurityManager(iniRealm);
// 将 SecurityManager 赋值给 SecurityUtils
SecurityUtils.setSecurityManager(securityManager);
// 获取当前 Subject (当前用户)
Subject currentUser = SecurityUtils.getSubject();
// 判断是否认证
if (! currentUser.isAuthenticated()) {
// 要进行登录的 Token
UsernamePasswordToken token = new UsernamePasswordToken("name", "password");
token.setRememberMe(true);
try {
// 登录-使用 Realm 校验要登录的 Token
currentUser.login(token);
} catch (UnknownAccountException uae) {
log.error("Username Not Found!", uae);
} catch (IncorrectCredentialsException ice) {
log.error("Invalid Credentials!", ice);
} catch (LockedAccountException lae) {
log.error("Your Account is Locked!", lae);
} catch (AuthenticationException ae) {
log.error("Unexpected Error!", ae);
}
}
Realm 配置文件
[users]
user = password, admin
user2 = password2, editor
[roles]
admin = *
editor = articles:*
授权
对用户赋予指定的角色,每个角色有特定的权限
// 判断用户是否有特定角色
if (currentUser.hasRole("admin")) {
log.info("Welcome Admin");
} else if (currentUser.hasRole("editor")) {
log.info("Welcomt Editor");
} else {
log.info("Welcome Guest");
}
// 判断当前用户是否有特定权限
if (currentUser.isPermitted("articles:compose")) {
log.info("You can compose an article");
} else {
log.info("You are not permitted to compose an article!");
}
Realm 配置
Realm 是一个 DAO,用来保存用户认证和授权所需要的信息,它可以来自文件也可以来自数据库等
要创建一个 Realm,只需要实现 Realm 接口,框架中有已经实现的 JdbcRealm,可以继承它,覆写下面的方法
doGetAuthenticationInfo()、doGetAuthorizationInfo()、getRoleNamesForUser()与getPermissions()
之后可以与之前IniRealm同样使用
登出
currentUser.logout();
Session 管理
如果在 Web 环境下,默认使用HttpSession实现,在独立桌面应用中也可使用
Session session = currentUser.getSession();
session.setAttribute("key", "value");
String value = (String) session.getAttribute("key");
if (val.equals("value")) {
log.info("Retrieved the correct value! [" + vallue + "]");
}
集成到 SpringBoot
maven 依赖:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.4.0</version>
</dependency>
下面需要配置 Realm 与 Shiro security filters
@Bean
public Realm realm() {
return new MyCustomRealm();
} @Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition filter
= new DefaultShiroFilterChainDefinition(); filter.addPathDefinition("/secure", "authc");
filter.addPathDefinition("/**", "anon"); return filter;
}
Shiro 笔记的更多相关文章
- Shiro笔记(五)JSP标签
Shiro笔记(五)JSP标签 导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags&q ...
- Shiro笔记(四)编码/加密
Shiro笔记(四)编码/加密 一.编码和解码 //base64编码.解码 @Test public void testBase64(){ String str="tang"; b ...
- Shiro笔记(三)授权
Shiro笔记(三)授权 一.授权方式 1.编程式: Subject subject=SecurityUtils.getSubject(); if(subject.hasRole("root ...
- Shiro笔记(二)身份验证
Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...
- Shiro笔记(一)基本概念
Shiro笔记(一)基本概念 一.简介 Shiro是一个Java安全框架,可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. Authentication:身份认证/登录,验证用户是 ...
- Apache shiro 笔记整理之web整合一
下面内容是在看了涛哥的<跟我一起学shiro> 和 视频<一头扎入进shiro> 后整理出来备忘和方便自己和其它人学习. 个人主页:http://www.itit123.cn/ ...
- Shiro笔记--shiroFilter权限过滤
1.shiro中shiroFilter中的一些配置页面的过滤权限 <!--名字必须和web.xml里面的filter-name一样--> <bean id="shiroFi ...
- Shiro笔记(六)Shiro标签的使用
Shiro标签的使用 引入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags"% ...
- Shiro笔记(五)Shiro授权
Shiro授权 也叫访问控制,即在应用中控制谁能访问那些资源(如访问页面.编辑数据.页面操作等).在授权中需要了解几个关键对象:主体(subject).资源(resource).权限(Permissi ...
- Shiro笔记(四)Shiro的realm认证
认证流程: 1.获取当前Subject.调用SecurityUtils.getSubject(); 2.测试当前用户是否已经被认证,即是否已经登录,调用Subject的isAurhenticated( ...
随机推荐
- php判断二个数最大公约数
$m = isset($_GET['m']) ? $_GET['m'] : 12; $n = isset($_GET['n']) ? $_GET['n'] : 8; //判断mn的大小 if($m&g ...
- svn更新时同步web服务器
1.重中之重:第一次更新需要先把数据库先检索出来,执行脚本./post.commit #!/bin/sh export LANG=en_US.UTF-8 SVN=/usr/local/subversi ...
- SSL/TLS 协议运行机制概述(一)
SSL/TLS 协议运行机制概述(一) SSL/TLS 发展史 1994年,NetScape 设计了SSL协议(Secure Sockets Layer) 1.0,未正式发布 1995年,NetSca ...
- des 加密解密工具类
最近在做des的双对称加密解密,特此记录一下. des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码 ...
- 动态创建多个button
2020-03-13 每日一例第6天 1.新建窗体windowform,修改text值: 2.找到mouseclick事件,填写代码: Random rm = new Random(); Button ...
- ipadmini iOS8.4.1系统精简
主要是删除一些系统自带的应用.语言,以及关闭不需要的进程. 精简之后运行流畅性还是能看得出有所提升的.(流畅的玩点游戏还是可行的) 文件的操作可以用Filza.iFile,也可以用爱思助手,但是爱思助 ...
- Codeforces Round #200 (Div. 2)E
Read Time 题意:有一个数组,很多指针指在这个数组上,每次每个指针可以向左或向右移动一个位置.给出一些需要访问的位置,问访问用的最少时间. 一个指针只可能转一次方向.二分答案. #includ ...
- Scala尾递归
递归函数应用 首先,我们来对比两个递归方法的求值步骤. 假设有方法gcd,用来计算两个数的最大公约数.下面是欧几里得算法的实现: def gcp(a: Int, b: Int): Int = if ( ...
- .Net Core 实现图片验证码
记录自己的学习,参考了网上各位大佬的技术,往往在登录的时候需要使用到验证码来进行简单的一个校验,这边使用在.net core上进行生成图片二维码 思路很简单=> 生成一个随机数->保存到服 ...
- ERP系统功能及部署方式
ERP是对企业经营过程中的一些事项进行系统化管理的一种软件,所以ERP软件包含企业经营过程中需要用到的多种功能管理模块,并且ERP软件有两种部署方式.下面一起来了解一下相关的知识吧! ERP系统的功能 ...