这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战
shiro简介
什么是Shiro?
Apache Shiro 是一个Java 的安全(权限)框架
shiro 可以非常容易的开发出足够好的应用,其不仅可以用在Javase 环境,也可以用在Javaee环境
shiro 可以完成,认证,授权,加密,会话管理,Web 集成,缓存等。
- ●Authentication:身份认证、登录,验证用户是不是拥有相应的身份;
- ●Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限,即判断用户能否进行什么操
- 作,如:验证某个用户是否拥有某个角色,或者细粒度的验证某个用户对某个资源是否具有某个权限!
- ●Session Manager:会话管理,即用户登录后就是第一次会话, 在没有退出之前,它的所有信息都在会话中;
- 会话可以是普通的JavaSE环境,也可以是Web环境;
- ●Cryptography:加密,保护数据的安全性,如密码加密存储到数据库中,而不是明文存储;
- ●Web Support: Web支持, 可以非常容易的集成到Web环境;
- ●Caching: 缓存,比如用户登录后,其用户信息,拥有的角色、权限不必每次去查,这样可以提高效率
- ●Concurrency: Shiro支持多线程应用的并发验证,即,如在一 个线程中开启另一 一个线程,能把权限自动的传
- 播过去
- ●Testing: 提供测试支持;
- ●Run As:允许-一个用户假装为另-一个用户(如果他们允许)的身份进行访问;
- ●Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了
- ●Subject: 任何可以与应用交互的’用户’;
- ●Security Manager:相当于SpringMVC中的DispatcherServlet; 是Shiro的心脏,所有具体的交互都通过
- Security Manager进行控制,它管理者所有的Subject, 且负责进行认证,授权,会话,及缓存的管理。
- ●Authenticator: 负责Subject认证,是一个扩展点,可以自定义实现;可以使用认证策略(Authentication
- Strategy),即什么情况下算用户认证通过了;
- ●Authorizer: 授权器,即访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中
- 的那些功能;
- ●Realm:可以有一个或者多个的realm, 可以认为是安全实体数据源,即用于获取安全实体的,可以用DBC实
- 现,也可以是内存实现等等,由用户提供;所以一般在应用中都需要实现自己的realm
- ●SessionManager: 管理Session生命周期的组件,而Shiro并不仅仅可以用在Web环境,也可以用在普通的
- JavaSE环境中
- ●Authorizer: 授权器,即访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中
- 的那些功能; .
- ●Realm: 可以有一一个或者多个的realm,可以认为是安全实体数据源,即用于获取安全实体的,可以用DBC实
- 现,也可以是内存实现等等,由用户提供;所以-般在应用中都需要实现自己的realm
- ●SessionManager: 管理Session生命周期的组件,而Shiro并不仅仅可以用在Web环境,也可以用在普通的
- JavaSE环境中
- CH用英J”,简筵:
- ●CacheManager: 缓存控制器,来管理如用户,角色,权限等缓存的;因为这些数据基本上很少改变,放到缓
- 存中后可以提高访问的性能;
- ●Cryptography: 密码模块,Shiro提高了- -些常见的加密组件用于密码加密,解密等
- 快速开始的第一个shiro*
- pom .xml*
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
log4j.properties
1 | java复制代码# |
shiro.ini
1 | java复制代码# |
官网复制就行哈
第一个demo 类
1 | java复制代码/* |
结果
1 | java复制代码"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA 2019.3.5\lib\idea_rt.jar=62162:D:\idea\IntelliJ IDEA 2019.3.5\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_231\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\rt.jar;E:\shiro\target\classes;E:\maven_jar包\org\apache\shiro\shiro-core\1.4.1\shiro-core-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-lang\1.4.1\shiro-lang-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-cache\1.4.1\shiro-cache-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-crypto-hash\1.4.1\shiro-crypto-hash-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-crypto-core\1.4.1\shiro-crypto-core-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-crypto-cipher\1.4.1\shiro-crypto-cipher-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-config-core\1.4.1\shiro-config-core-1.4.1.jar;E:\maven_jar包\org\apache\shiro\shiro-config-ogdl\1.4.1\shiro-config-ogdl-1.4.1.jar;E:\maven_jar包\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;E:\maven_jar包\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;E:\maven_jar包\org\apache\shiro\shiro-event\1.4.1\shiro-event-1.4.1.jar;E:\maven_jar包\org\slf4j\jcl-over-slf4j\1.7.21\jcl-over-slf4j-1.7.21.jar;E:\maven_jar包\org\slf4j\slf4j-api\1.7.21\slf4j-api-1.7.21.jar;E:\maven_jar包\org\slf4j\slf4j-log4j12\1.7.21\slf4j-log4j12-1.7.21.jar;E:\maven_jar包\log4j\log4j\1.2.17\log4j-1.2.17.jar" Quickstart |
分析一下源码
在那个inl 里解释了角色的指定
Springboot 跟Shiro 环境搭建
1,导入依赖
1 | xml复制代码 <!--引入thymeleaf依赖--> |
写config 类
Shior Config 类
1 | java复制代码package com.jj.demo.config; |
Shiro 主要的三个
// Subject 用户
// SecurityManager 管理所有的用户
1 | arduino复制代码// Realm 连接数据 |
写自己的Realm 类
1 | java复制代码package com.jj.demo.config; |
简单的几个页面和控制层
控制层
1 | java复制代码package com.jj.demo.control; |
实现登录拦截功能!!
简单的写个登录的控制层,还有登录页面就可以了
效果
走到了我们指定的url
控制层写一个登录的方法
1 | java复制代码// 登录的 |
会自动与我们写的UserRealm 的认证联系起来。效果
1 | java复制代码2020-12-24 16:09:05.446 INFO 4028 --- [ main] com.jj.demo.DemoApplication : Started DemoApplication in 1.929 seconds (JVM running for 3.107) |
连接数据库测试
实体类简单的几个name,pwd
简单的根据name 做个查询 具体代码非常简单。在UserRealm 上注入service 层即可!!
在自己写的UserRealm 类里认证里写上
pom.xml
1 | xml复制代码 <!--Lombok引入--> |
yml 配置
1 | yaml复制代码# 数据源配置 |
1 | java复制代码//认证 |
授权功能!!
数据库添加字段
在 ShiroConfig 里加上如下代码
UserRealm类
1 | java复制代码// 授权 |
本文转载自: 掘金