1.什么shiro框架
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
2.shiro认证流程
3.shiro操作步骤
创建一个maven java工程
3.1加入依赖
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.9.0</version>
</dependency>
</dependencies>
3.2 创建ini文件
3.3测试代码
public class TestShiro01 {
public static void main(String[] args) {
//1.获取SecutiryManager对象
DefaultSecurityManager securityManager = new DefaultSecurityManager();
//2.读取ini文件
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
//3.设置securityManager的realm
securityManager.setRealm(iniRealm);
//4.设置securityManager上下文生效
SecurityUtils.setSecurityManager(securityManager);
//5.获取subject主体对象
Subject subject = SecurityUtils.getSubject();
try {
//UsernamePasswordToken作用就是封装你输入的账号和密码
UsernamePasswordToken token = new UsernamePasswordToken("king","123456");
//抛出异常,对比shiro中realm会自动比对
subject.login(token);
System.out.println("登录成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("账号或者密码错误");
}
}
}
Subject: 主题 登录信息提交给SecurityManager, --->认证器Authenticator---->根据你的realm提供的数据进行相关的认证。 realm---与数据源交互的类。
4.密码加密
public class Test01 {
public static void main(String[] args) {
/* //source:需要加密的明文
Md5Hash md5Hash = new Md5Hash("123456");
System.out.println(md5Hash);//e10adc3949ba59abbe56e057f20f883e密文---默认md5加密是不可逆的。
//salt:盐
Md5Hash md5Hash1 = new Md5Hash("123456","abc?!");
System.out.println(md5Hash1);*/
//设置n次加密
Md5Hash md5Hash2 = new Md5Hash("123456","efg",1024);
System.out.println(md5Hash2);
}
}
5.授权
public class TestShiro01 {
public static void main(String[] args) {
//1.获取SecutiryManager对象
DefaultSecurityManager securityManager = new DefaultSecurityManager();
// //2.读取ini文件
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
//3.设置securityManager的realm
securityManager.setRealm(iniRealm);
//4. 设置securityManager上下文生效
SecurityUtils.setSecurityManager(securityManager);
//5. 获取subject主体对象
Subject subject= SecurityUtils.getSubject();
try {
//UsernamePasswordToken作用就是封装你输入的账号和密码 是客户输入的账号和密码
UsernamePasswordToken token=new UsernamePasswordToken("zhangsan","123456");
//抛出异常 比对shiro中realm把你自带对比
subject.login(token);
System.out.println("登录成功");
}catch (Exception e){
e.printStackTrace();
System.out.println("账号或密码错误");
}
// subject.logout();
System.out.println("====================================================登录后=====================================");
boolean authenticated = subject.isAuthenticated();
if(authenticated){
//判断当前登录者是否具有user:query权限
boolean permitted = subject.isPermitted("user:update");
System.out.println(permitted);
//从角色角度
boolean b = subject.hasRole("role1");
System.out.println(b);
}else{
System.out.println("请先认证");
}
}
}