shiro简介

简介: shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。通俗的讲,shiro的身份认证和授权就是拦截用户未登陆或者没有相应权限的越权访问。Shiro的企业会话管理实际就是session管理,shiro的session管理可以自定义Session存储的方式,保存到内存、文件、数据库都可以,与传统tomcat等容器无关。

shiro的核心组件主要有:
Authentication(认证):用户身份识别,通常被称为用户“登录”
Authorization(授权):访问控制。比如某个用户是否具有某个操作的使用权限。
Session Management(会话管理):特定于用户的会话管理,用以代替web项目中的HttpSession对象。
PS:所以在搭建shiro环境时,配置以上3大组件是关键。
首先我们先通过一个原生的基本的java案例来了解下shiro执行过程

1.创建一个maven的java项目,引入相关的依赖

<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-core</artifactId>
  <version>1.3.2</version>
</dependency>

2.在resources中创建shiro.ini文件,该文件用来配置存储用户的账户信息、角色、权限等
#配置用户和角色信息
[users]
#格式是:用户名=密码,角色名(角色可选)
zhang=123,admin
wang=123
admin=123,normal,admin,vip
#配置角色

[roles]
#格式是:角色名=权限名1,权限名2
admin=user,menu
normal=ua
vip=delvip
vip2=delvip2

3.在测试类中编写代码测试

//1.获取安全管理器

    IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
    SecurityManager securityManager = factory.getInstance();
    //2.需要设置安全管理器
    SecurityUtils.setSecurityManager(securityManager);
    //3.获取Subject对象,即将登陆的用户
    Subject subject = SecurityUtils.getSubject();
    Session session = subject.getSession();
    /*测试session
    session.setAttribute("name","admin");
    System.out.println(session.getAttribute("name"));*/

    //表示没有验证
    if (subject.isAuthenticated()==false){
        //通过UsernamePasswordToken来封装用户名密码,使用ini中存在的用户
        UsernamePasswordToken token = new UsernamePasswordToken("admin","123");
        token.setRememberMe(true);//是否记住
        try {
            subject.login(token);//登录
        } catch (UnknownAccountException e) {
            System.err.println("账户不存在");
        }catch (IncorrectCredentialsException e) {
            System.err.println("密码错误");
        }catch (LockedAccountException e) {
            System.err.println("账户已被锁");
        }
    }
    //是否拥有指定的角色
    if(subject.hasRole("admin")){
        System.out.println("拥有admin角色");
    }else{
        System.err.println("不是该角色");
    }
    //是否拥有制定的权限
    if (subject.isPermitted("delvip")){
        System.out.println("拥有该权限");
    }else{
        System.err.println("没有该权限");
    }
    //退出登录
    subject.logout();

ok,到此为止我们了解了一下一个简单的shiro的执行流程。

相关文章
|
Web App开发 Java Linux
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
1086 0
|
缓存 Java Maven
Maven配置多仓库无效?来看看这篇文章
Maven配置多仓库无效?来看看这篇文章
1814 0
Maven配置多仓库无效?来看看这篇文章
|
7月前
|
机器学习/深度学习 人工智能 运维
AI为网络可靠性加“稳”——从断网烦恼到智能运维
AI为网络可靠性加“稳”——从断网烦恼到智能运维
349 2
|
SQL 数据库
常见寻找 SQL 注入方法总结
常见寻找 SQL 注入方法总结
|
Java Apache Maven
【异常解决】Handler dispatch failed;nested exception is java.lang.NoClassDefFoundError: org/apache/common
【异常解决】Handler dispatch failed;nested exception is java.lang.NoClassDefFoundError: org/apache/common
9644 0
|
自然语言处理 算法 机器人
工业控制编程语言入门
工业控制编程语言入门
|
小程序 Java 关系型数据库
基于Java微信小程序场地预约系统设计和实现(源码+LW+调试文档+讲解等)
基于Java微信小程序场地预约系统设计和实现(源码+LW+调试文档+讲解等)
|
Android开发
Android中去掉ActionBar的几种方法
Android中去掉ActionBar的几种方法
282 0
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的家庭记账本的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的家庭记账本的详细设计和实现
201 0
|
安全 网络虚拟化 数据安全/隐私保护
如何处理移动应用中的网络故障?
处理移动应用网络故障涉及检查网络连接与设备状态、减少信号干扰、使用安全连接、避免公共网络、利用诊断工具、分层排除法、PPP协议排错、更新软件及用户教育。通过这些措施能有效定位并解决故障,确保网络稳定和用户安全。
520 0
下一篇
oss云网关配置