shiro入门案例-持续更新

Spring Security 和 Shiro 该如何选择? Spring Security在架构上将认证与授权分离,并提供了扩展点。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和授权支持。它与Spring MVC有很好地集成 ,并配备了流行的安全算法实现捆绑在一起。客户端发起一个请求,进入 Security 过滤器链。当到 LogoutFilter 的时候判断是否是登出路径,如果是登出路径则到 logoutHandler ,如果登出成功则到 logoutSuccessHandler 登出成功处理,如果登出失败则由 ExceptionTran 阅读详情

1.1 pom 文件

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.4.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.12</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.12</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

ops : require JDK 1.6+ and Maven 3.0.3+

1.2 配置

创建一个shiro.ini文件

#定义用户信息
#格式:用户名=密码,角色1,角色2,....
[users]
zhangsan=123,admin
lisi=456,manager,seller
wangwu=789,clerk
# -----------------------------------------------------------------------------
# 角色及其权限信息
# 预定权限:user:query
#          user:detail:query
#          user:update
#          user:delete
#          user:insert
#          order:update
#          ....
[roles]
# admin 拥有所有权限,用*表示
admin=*
# clerk 只有查询权限
clerk=user:query,user:detail:query
# manager 有 user 的所有权限
manager=user:*

1.3 代码

  • 通过在ini中设置的 身份信息、角色、权限,做安全管理
  • 1.身份认证: subject.login(token)
  • 2.是否认证身份判断:subject.isAuthenticated()
  • 3.角色校验:subject.hasRole(String:role); subject.hasRoles(List:roles)
  • 4.权限校验:subject.isPermitted(String:perm); subject.isPermittedAll(List:perms)
// 定义main函数测试效果
// 创建 "SecurityFactory",加载ini配置,并通过它创建SecurityManager 
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();

// 将SecurityManager托管到SecurityUtils工具类中(ops:之后可以不必关心SecurityManager)
SecurityUtils.setSecurityManager(securityManager);

// 获得Subject,通过subject可以执行shiro的相关功能操作(身份认证或权限校验等)
Subject currentUser = SecurityUtils.getSubject();

// 身份认证( 类似登录逻辑 )
if (!currentUser.isAuthenticated()) {//判断是否已经登录
    //如果未登录,则封装一个token,其中包含 用户名和密码
    UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123");
    try {
        //将token传入login方法,进行身份认证 (判断用户名和密码是否正确)
        currentUser.login(token);//如果失败则会抛出异常
    } catch (UnknownAccountException uae) {//用户不存在
        System.out.println("There is no user with username of " + token.getPrincipal());
    } catch (IncorrectCredentialsException ice) {//密码错误
        System.out.println("Password for account " + token.getPrincipal() + " was incorrect!");
    } catch (LockedAccountException lae) {//账户冻结
        System.out.println("The account for username " + token.getPrincipal() + " is locked.  " 
                           +"Please contact your administrator to unlock it.");
    }catch (AuthenticationException ae) {//其他认证异常
        
    }
}

// 认证成功则用户信息会存入 currentUser(Subject)
System.out.println("User [" + currentUser.getPrincipal() + "] logged in successfully.");

// 可以进一步进行角色校验 和 权限校验
if (currentUser.hasRole("admin")) { //校验角色
    System.out.println("hello,boss");
} else {
    System.out.println("Hello, you");
}
if (currentUser.isPermitted("user:update")) { //校验权限
    System.out.println("you can update user");
} else {
    System.out.println("Sorry, you can not update.");
}

// 用户退出,会清除用户状态
currentUser.logout();

// System.exit(0);

##3.4 权限规则

最常用的权限标识:【资源 :操作】

1> user:query , user:insert , order:delete , menu:show
  	【:】 作为分隔符,分隔资源和操作【资源:操作】
  	【,】 作为分隔,分隔多个权限【权限1,权限2,权限3】
2> user:* , *:query
  	【*】 作为通配符,代表所有操作、资源
  	【user:* 即user的所有操作】
  	【*:query 即所有资源的查询操作】
3> *
  	【代表一切资源的一切权限 = 最高权限】
4> 细节:
	1)【user:*  可以匹配 user:xx, user:xx:xxx】
  	  【*:query 只可以匹配 xx:query,不能匹配 xx:xx:query. 除非 *:*:query】
  	2)【user:update,user:insert】 可以简写为 【"user:update,insert"】
       [roles]
       manager1=user:query,user:update,user:insert
       manager2="user:query,update,insert" #注意要加引号
       #如上manager1和manager2权限等价
       #subject.isPermittedAll("user:update","user:insert","user:query")

实例级权限标识:【资源 :操作 :实例】,粒度细化到具体某个资源实例

1> user:update:1 , user:delete:1
   # 对用户1可以update,对用户1可以delete
2> "user:update,delete:1" #和上面等价
   # subject.isPermittedAll("user:update,delete:1","user:update:1","user:delete:1")
3> user:*:1 , user:update:* , user:*:*
springboot+shiro入门案例 shiro入门案例 立即下载

相关推荐

一个简单的shiro例子

一个简单的SSM框架,基于IDEA IDE开发,可以直接运行,里面加入了shiro,前端用bootstrap展现

Shiro使用示例

shiro初学者使用

qq_58277753的博客 353

Shiro非常详细的实例

Shiro非常详细的实例,入门的详细资料

shiro使用的入门例子

一般做权限的验证使用数据库来描述然后在chengx

Senssic 870

shiro demo一个结合spring的实例

网上很多都是不全的,我看了都没太大用,最后还是自己写个demo,给初学者参考吧,用myeclipse8.6开发的,直接导入项目可用,稍配一下jdk,包括谁和授权,虽然没有跟后台交互,但是是模拟了一下数据库。还有一篇文档,我也会上传,大家可以去我的资源找一下,主要是对这个demo的解释,以及如何跟数据库交互。

shiro springmvc mybatis bootstarp maven 整合框架(带完整权限数据库)

使用前请先看工程中ReadMe文档。注意该项目为maven工程连接外网可以自动在maven.apache.org下载jar包。

Shiro安全框架详解及springboot使用示例

目录一、认识Shiro1、什么是Shiro?2、有哪些功能?3、Shiro架构(外部)4、Shiro架构(内部) 一、认识Shiro 1、什么是Shiro? Apache Shiro 是一个Java 的安全(权限)框架。 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环 境。 Shiro可以完成,认证,授权,加密,会话管理,Web集成,缓存等。 2、有哪些功能? Authentication:身份认证、登录,验证用户是不是拥有相应的身份; Aut

weixin_46822367的博客 4371

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第三部分:城市洪涝灾害应急响应与评估平台实战-文章 14:项目二启动与多源异构数据对齐

我们将系统性地梳理城市洪涝场景下的所有关键数据源,从天上的卫星(光学与SAR)、空中的无人机,到地面的物联网传感器和社交媒体信息流,深入剖析每种数据在洪涝响应中的独特价值、获取方式与内在局限性。本章的核心将是一个详尽的、生产级的数据对齐技术全景,我们将分步解决三大核心对齐难题:空间对齐(将所有数据投影到统一的地理坐标系)、时间对齐(处理不同采样频率的时间序列)以及最困难的语义对齐(将文本描述与物理观测相关联)。

panshengwu的博客 2003

Shiro简单小案例

shiro

baidu_41936920的博客 616

基于Simulink的前馈解耦SVPWM整流器仿真

本文提出了一种基于Simulink的前馈解耦SVPWM整流器仿真方案,针对传统双闭环控制存在的耦合严重、电压利用率低等问题进行优化。通过前馈补偿dq轴耦合项(ωLiq和ωLid)结合SVPWM调制算法,实现了电流跟踪误差<3%、电压利用率达0.99、THD<3%的性能指标。文章详细阐述了系统架构设计,包括前馈解耦原理推导、SVPWM算法实现步骤,并提供了完整的Simulink建模方法。仿真结果表明,该方案在动态响应速度(25ms)和直流电压纹波(1.1%)方面显著优于传统SPWM控制。同时给出了

MHD0815的博客 162

ArcGIS实战:用栅格数据为偏远山区规划一条最省钱的公路(附完整数据与操作步骤)

本文详细介绍了如何利用ArcGIS进行栅格数据分析,为偏远山区规划一条最省钱的公路。通过DEM高程数据处理、成本权重设定和最佳路径计算,结合真实案例展示了从数据准备到工程方案转化的完整流程,帮助工程师在复杂地形中做出经济高效的路线决策。

weixin_32136203的博客 357

shiro 权限框架

一 shiro 是什么 shiro 是一个功能强大和易于使用的Java安全框架,为开发人员提供一个直观而全面的解决方案的认证,授权,加密,会话管理。 二 shiro 能干什么 shiro 四个主要的功能 Authentication:身份认证/登录,验证用户是不是拥有相应的身份; Authorization:授权,即权限验证,判断某个已经认证过的用户是否拥有某些权限访问某些资源,一般授权会有角色授权和权限授权; SessionManager:会话管理,即用户登录后就是一次..

qq_45939159的博客 4519

Foxmail 7.2.25以下版本XSS漏洞实战复现:手把手教你如何构造恶意邮件(含防御方案)

本文深入解析Foxmail 7.2.25以下版本的XSS漏洞(CNVD-2025-06036),详细展示如何构造恶意邮件进行跨站脚本攻击,并提供从客户端升级到企业级防护的多层次防御方案,帮助用户有效防范安全风险。

view3的博客 163

Shiro框架入门到熟悉(持续更新中)

Shiro框架之新手入门----持续更新中(有案例说明) 如有侵权请联系博主,并进行删除 Shiro简介 hiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。 spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。 shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro

jiegedalao的博客 296

EtherCat 从站开发中遇到的问题分享

EtherCat从站 AX58100

yu_arius的博客 2058

Hi3516CV610开发板实战:从零搭建智能视觉监控系统

本文详细介绍了从零开始基于Hi3516CV610开发板搭建智能视觉监控系统的完整实战流程。涵盖硬件连接、系统配置、摄像头集成、网络设置、固件烧录到视频处理与智能分析功能开发,提供了丰富的实践经验和调试技巧,帮助开发者快速掌握嵌入式视觉系统开发。

vvv99的博客 564

Shiro源码解析(持续更新中)

Shiro安全框架学习心得(源码分析) 概述 ​ shiro(http://shiro.apache.org/)是apache公司推出的一款轻量级开源安全框架。它支持身份验证,授权,加密和会话管理。Shiro提供易于理解的API,在项目整合时较为轻松。目前Shiro在国内的软件公司中使用较为广泛,是一个值得学习的框架。 一、基础概念 Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份; Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用

yuhelve3308的博客 2020

TI理想二极管在冗余电源中应用实例

深入探讨理想二极管如何提升冗余电源系统的效率与可靠性,通过实际应用案例展示其在电流隔离和自动切换中的优势,帮助工程师优化电源架构设计。

weixin_30653091的博客 991

shiro----后续会持续更新

今天了一节讲shiro的视频   先记这 先建个java工程  再建个lib文件夹  把暂时需要的4个jar包粘上去再build path  下载jar包链接 https://download.youkuaiyun.com/download/qq_35653822/10916400 工程目录结构如下图 之前我用其他的jar运行报错 可能因为版本不对 工程就是仿照shiro的开源代码做的   s...

qq_35653822的博客 440

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷1:文末附答案)

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷1:文末附答案)

王老师青少年编程 1614

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring-Boot实战-FEBS-shiro(持续更新)

FEBS-shiro FEBS-shiro 是一个Spring-Boot 开源项目。本文将讲解该项目实现步骤。 日志 该项目采用Spring-Boot默认日志框架。 日志代码架构 该项目通过在classpath路径下,创建logback-spring.xml配置文件,配置日志。 logback-spring.xml <?xml version="1.0" encoding="UTF-8"?...

u014516009的博客 4256

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringSecurity入门,前后端分离案例(笔记持续更新...)

SpringSecurity入门

weixin_47201411的博客 392

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

菜鸟的shiro学习总结

菜鸟的shiro学习总结说明一、入门系列(1)单机应用下是shiro 说明 更新时间:2020/8/22 18:28,更新了缓存相关内容 本文主要对shiro的学习总结,本文会持续更新,不断地扩充 本文仅为记录学习轨迹,如有侵权,联系删除 一、入门系列 (1)单机应用下是shiro .........

最强菜鸟 1219

springboot整合shiro(完整版)

*** @Description 权限配置类*/@Override//获取登录用户名//查询用户名称//添加角色和权限//添加角色//添加权限}}}/*** @Description 认证配置类*/@Override}//获取用户信息//这里返回后会报出对应异常} else {//这里验证authenticationToken和simpleAuthenticationInfo的信息}}}

m0_67390788的博客 3532

Springboot整合shiro_springboot shiro,程序人生

RBAC是Role-Based Access Control(基于角色的访问控制)的缩写。它是一种广泛应用于安全管理中的访问控制模型。RBAC模型通过授予用户不同的角色,并将角色与权限进行关联,来管理对资源的访问。角色(Role):角色是一组具有相似职责和权限的用户集合。例如,管理员、编辑、访客等都可以是角色。权限(Permission):权限是指执行特定操作或访问特定资源的能力。例如,读取、写入、删除等操作可以被视为不同的权限。用户(User):用户是系统中的个体,可以被授予一个或多个角色。

m0_60567881的博客 728

若依框架学习————持续更新

一、若依框架学习————持续更新 一、01-登录流程 1、用户发送请求进入到登录页面 //SysLoginController.java @GetMapping("/login") public String login(HttpServletRequest request, HttpServletResponse response) { // 如果是Ajax请求,返回Json字符串。 if (ServletUtils.isAjaxRequest(request)) {

weixin_43790051的博客 2185
上一篇: JRebel-热部署插件使用-绝对干货
下一篇: git教程-引言、安装
java_zhj9
博客等级 码龄10年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值