Shiro(Java权限框架)入门
2021-03-15 13:31
标签:身份认证 ken ati string auth 轻松 移动 方式 三方 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。 在shiro中核心的概念有三个: 即“当前操作用发户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程(比如微信QQ等等)、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。 它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务,且它管理着所有Subject;可以看出它是Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器。 域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源,同时也可以是配置文件。 从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。 (1)易于理解的 Java Security API; 1.添加依赖: 2.添加安全数据源shiro-permission.ini文件(官方推荐使用ini文件格式): 3.添加Demo测试类: Shiro(Java权限框架)入门 标签:身份认证 ken ati string auth 轻松 移动 方式 三方 原文地址:https://www.cnblogs.com/StarChen20/p/14004045.html什么是Shiro?
Shiro组成部分
核心组件
1.subject
2.Security Manager
3.Realm
Shiro 特点
(2)简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
(3)对角色的简单的签权(访问控制),支持细粒度的签权;
(4)支持一级缓存,以提升应用程序的性能;
(5)内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
(6)异构客户端会话访问;
(7)非常简单的加密 API,自带的加密API完全够用;
(8)不跟任何的框架或者容器捆绑,可以独立运行实现简单案例
dependency>
groupId>org.apache.shirogroupId>
artifactId>shiro-coreartifactId>
version>${shiro.version}version>
dependency>
dependency>
groupId>org.apache.shirogroupId>
artifactId>shiro-webartifactId>
version>${shiro.version}version>
dependency>
[users]
zs=123,role1,role2,role3
ls=123,role2
ww=123,role3
admin=123,role1,role2,role3,admin
[roles]
role1=user:create,user:update,user:delete,user:view,user:load
role2=user:create,user:delete
role3=user:create
admin=user:*
package com.star.demo;
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 java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Demo {
public static void main(String[] args) {
//org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token 密码错误认证失败
//org.apache.shiro.authc.UnknownAccountException: Realm [org.apache.shiro...] was unable to find account data
// 账户不存在错误
//1:获取securityFactory工厂类
IniSecurityManagerFactory iniSecurityManagerFactory = new IniSecurityManagerFactory("classpath:shiro" +
"-permission" +
".ini");
//2.获取安全管理器对象
SecurityManager instance = iniSecurityManagerFactory.getInstance();
//3.设置subjectManager对象,把subjec对象交给SecurityUtils管理
SecurityUtils.setSecurityManager(instance);
//4.获取subject对象
Subject subject = SecurityUtils.getSubject();
//5.生成token
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("admin","123");
//6.进行验证
try {
//7.登陆(身份认证)
subject.login(usernamePasswordToken);
System.out.println("身份认证成功!");
} catch (AuthenticationException e) {
e.printStackTrace();
System.out.println("身份认证失败!");
}
//8.用户授权
try {
// if(subject.hasRole("role6")){//1.普通授权方式,检查单个授权
//2.传集合用户授权,有一个未授权的就返回false
// List
下一篇:Python模块相关知识点小结