为什么学习shiro,是因为在工作中需要使用,后面看到shiro的介绍,我还是觉得就算是工作中不要使用到,还是值得学习.有什么写的不好的,希望大家多多指导!
Apache Shiro(日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。
Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:
认证 - 用户身份识别,常被称为用户“登录”;
授权 - 访问控制;
密码加密 - 保护或隐藏数据防止被偷窥;
会话管理 - 每用户相关的时间敏感的状态。
Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素
最重要的一张图:
- Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
- Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
- Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
- Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
- Web Support:Web支持,可以非常容易的集成到Web环境;
- Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
- Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
- Testing:提供测试支持;
- Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
- Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
以上就是shiro大概的介绍,我就只说这样多,其实都是在网上搜的,我英文不好,看英文文档看的有点心累.
以下就是shiro的HelloWord了
准备工作,我是使用的maven,所以在maven仓库中找到shiro的包的依赖
新建一个maven工程,新建简单的工程即可,将下面的依赖添加进去即可,我没有加入slf4j的实现
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
在资源文件夹下面新建shiro.ini配置方法
语法规则如下:
‘name’=’pwd’
‘name’=’pwd’
具体看代码:
[users]
yyt=123
新建一个HolleWord类,写上main方法,
package com.kingsky;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class HolleWord {
public static void main(String[] args) {
//读取配置文件,初始化SecurityManager工厂
Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");
//获取到SecurityManager实例
SecurityManager securityManager=factory.getInstance();
//把SecurityManager绑定到SecurityUtils中
SecurityUtils.setSecurityManager(securityManager);
//得到当前用户
Subject subject=SecurityUtils.getSubject();
//创建Token令牌,用户名/密码
UsernamePasswordToken passwordToken=new UsernamePasswordToken("yyt", "123");
//验证登录 会抛出异常
try {
subject.login(passwordToken);
System.out.println("身份验证成功!!!");
} catch (AuthenticationException e) {
e.printStackTrace();
System.out.println("身份验证失败!!!!");
}
//退出登录
subject.logout();
}
}
点击运行,查看控制台输入的文字:
警告就是没有加入slf4j的实现,然后还要加入配置文件,
加入说在这行代码中修改pwd或者是name
UsernamePasswordToken passwordToken=new UsernamePasswordToken("yyt", "1234");
则报错,意思是匹配不成功
最近有没有学习微信小程序的开发的, 我最近在学习了,后面看看有时间,出出我学习微信小程序的心得博客!