当前位置: 首页 > news >正文

java代码shiro注解_java相关:Shiro集成Spring之注解示例详解

java相关:Shiro集成Spring之注解示例详解

发布于 2020-7-29|

复制链接

Shiro想必大家都知道了,是目前使用率要比spring security都要多的一个权限框架,下面

前言Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。集成 Spring 后我们通过过滤器链来配置每个 URL 需要的权限,但当配置多了以后就会不方便,而且只支持 URL 级别的配置。好在 Shiro 提供了相应的注解用于权限控制,此处使用了 Spring MVC 来测试Shiro注解,当然 Shiro 注解不仅仅可以在 web 环境使用,在独立的JavaSE 中也是可以用的,此处只是以 web 为例了。下面话不多说了,来一起看看详细的介绍吧开启注解配置

首先我们需要在 Spring Web 的配置文件 spring-web.xml 中加入以下内容来开启 Shiro 的注解支持 :

```java

```

简单演示

接着我们就可以使用注解来配置权限:

```java

@RestController

public class AuthorizationController {

@RequestMapping("/role1")

@RequiresRoles("user")

public String role1() {

return "success";

}

@RequestMapping("/role2")

@RequiresRoles("admin")

public String role2() {

return "success2";

}

}

```

访问 role1 方法需要当前用户有 user 角色,role2 方法需要 admin 角色。当验证失败时,会抛出 UnauthorizedException ,我们可以使用 Spring 的 ExceptionHandler 来进行异常处理:

```java

@ExceptionHandler(UnauthorizedException.class)

public String processUnauthorizedException(UnauthorizedException e) {

return e.getMessage();

}

```

更多注解

当然不止有 @RequiresRoles 用来验证角色,Shiro 还提供了以下注解:@RequiresAuthentication

验证用户是否登陆,等同于方法 subject.isAuthenticated()  。@RequiresUser

验证用户是否被 记忆,即登陆成功或 RememberMe 状态。等同于方法 : subject.isAuthenticated() 与 subject.isRemembered() 。@RequiresGuest

仅未登录状态可访问,与 @RequiresUser 完全相反。@RequiresPermissions

验证是否具备权限,可通过参数 logical 来配置验证策略:

```java

// 拥有 admin 或 user 角色即可

@RequiresPermissions(logical = Logical.OR,value = {"admin", "user"})

// 需同时具备 admin 与 user 角色

@RequiresPermissions(logical = Logical.AND,value = {"admin", "user"})

```

RequiresRoles 同样可以配置验证策略。小结

相关文章:

  • Oracle Shared Pool机制之——Latches, Locks, Pins and Mutexes
  • java生成apk工具_用Android SDK Build Tools手动构建APK
  • C++常用数据类型
  • java的继承机制有什么好处_JAVA基础-继承机制
  • java类的三种特性_第10章 Java类的三大特性之一:多态
  • 微信公众平台接口测试账号申请
  • java系统类的使用体验_javamelody使用体验
  • 摆花(codevs 1315)
  • java课设要分小组吗_Java团队课程设计-学生成绩管理
  • 惊群 java_(转)测试Lighttpd accept的惊群现象
  • Python——私有化 和 属性property
  • python again_收藏!最全从Python小白到大牛,要走的路这里都有(初级篇)
  • .Net Core缓存组件(MemoryCache)源码解析
  • php 函数变量 前加,php在函数和变量前面加上@和$符号的区别详解
  • 凸函数与简森不等式(Jensen's inequality)
  • __proto__ 和 prototype的关系
  • codis proxy处理流程
  • Create React App 使用
  • HTML5新特性总结
  • Linux中的硬链接与软链接
  • Markdown 语法简单说明
  • Otto开发初探——微服务依赖管理新利器
  • python3 使用 asyncio 代替线程
  • windows下如何用phpstorm同步测试服务器
  • 大主子表关联的性能优化方法
  • 对JS继承的一点思考
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端攻城师
  • 容器服务kubernetes弹性伸缩高级用法
  • 试着探索高并发下的系统架构面貌
  • 学习笔记:对象,原型和继承(1)
  • 云大使推广中的常见热门问题
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​secrets --- 生成管理密码的安全随机数​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #include到底该写在哪
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (33)STM32——485实验笔记
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (五)网络优化与超参数选择--九五小庞
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)ABI是什么
  • (转)linux 命令大全
  • (转)详解PHP处理密码的几种方式
  • .bat批处理出现中文乱码的情况
  • .NET 8.0 发布到 IIS
  • .NET BackgroundWorker