Shiro集成Spring之注解示例详解

前言

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 的注解支持 :

<aop:config proxy-target-class="true"/>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
 <property name="securityManager" ref="securityManager"/>
</bean>

简单演示

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

@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 来进行异常处理:

@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 来配置验证策略:

// 拥有 admin 或 user 角色即可
@RequiresPermissions(logical = Logical.OR,value = {"admin", "user"})
// 需同时具备 admin 与 user 角色
@RequiresPermissions(logical = Logical.AND,value = {"admin", "user"})

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

小结

我们可以通过注解配置来更方便的实现权限配置,且这些方法不仅可以配置在 Controller 层,还可以在 Service 层,DAO 层等,只不过需要通过 IOC 容器来获取对象才能使用。

本章代码地址 : https://github.com/zhaojun1998/Premission-Study/tree/master/Permission-Shiro-10/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 详解Spring Boot 集成Shiro和CAS

    请大家在看本文之前,先了解如下知识点: 1.Shiro 是什么?怎么用? 2.Cas 是什么?怎么用? 3.最好有spring基础 首先看一下下面这张图: 第一个流程是单纯使用Shiro的流程. 第二个流程是单纯使用Cas的流程. 第三个图是Shiro集成Cas后的流程. PS:流程图急急忙忙画的,整体上应该没有什么问题,具体细节问题还请大家留言指正. 如果你只是打算用到你的Spring Boot项目中,那么看着如下配置完成便可. 如果你想进一步了解其中的细节,还是建议大家单独配置Shiro.单

  • Spring Boot集成Shiro并利用MongoDB做Session存储的方法详解

    前言 shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/ 它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和shiro整合的功能! 之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mongodb中,这个比较符合mongodb的设计初衷,而且在分布式项目中mongo

  • spring boot 集成shiro的配置方法

    spring boot提供了一个自带的认证框架,同时也提供自定义的javaconfig配置扩展,spring-sercurity同样也是优秀的框架,但是习惯了用apache shiro框架,而且原项目就是集成的shiro框架,到网上找了一下配置方式,没找到完全配置的方法,因此决定自己动手,丰衣足食! 要在spring boot上集成其他框架,首先要会spring javaconfig方法,利用此方法同样可以配置其他模块,废话少说,开始... 开始前需要导入maven依赖(shiro-web可选)

  • springmvc集成shiro登录权限示例代码

    一般的登录流程会有:用户名不存在,密码错误,验证码错误等.. 在集成shiro后,应用程序的外部访问权限以及访问控制交给了shiro来管理. shiro提供了两个主要功能:认证(Authentication)和授权(Authorization);认证的作用是证明自身可以访问,一般是用户名加密码,授权的作用是谁可以访问哪些资源,通过开发者自己的用户角色权限系统来控制. shiro的会话管理和缓存管理不在本文范围内. 下面通过登录失败的处理流程来介绍springmvc与shiro的集成. 项目依赖:

  • Spring 应用中集成 Apache Shiro的方法

    这一篇文章涵盖了将 Shiro 集成到基于 Spring 的应用程序的方法. Shiro 的 Java Bean兼容性使它非常适合通过 Spring XML 或其他基于 Spring 的配置机制进行配置.Shiro 的应用程序需要一个应用程序单例安全管理器 ( SecuriyManager) 实例.注意,这并不一定是静态的单例,但是应用程序应该只使用一个实例,不管它是否是静态的单例. 1.独立的应用程序 以下是在 Spring 应用程序中启用应用程序单例安全管理器的最简单方法: <!-- 定义连

  • 详解spring与shiro集成

    Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示例之前,需要导入shiro-spring及spring-context依赖,具体请参考pom.xml. spring-beans.xml配置文件提供了基础组件如DataSource.DAO.Service组件的配置. JavaSE应用  spring-shiro.xml提供了普通JavaSE独立应用

  • spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制

    1.添加maven依赖(先安装好cas-server-3.5.2,安装步骤请查看本文参考文章) <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>

  • spring boot集成shiro详细教程(小结)

    我们开发时候有时候要把传统spring shiro转成spring boot项目,或者直接集成,name我们要搞清楚一个知识,就是 xml配置和spring bean代码配置的关系,这一点很重要,因为spring boot是没有xml配置文件的(也不绝对,spring boot也是可以引用xml配置的) 引入依赖: <dependency> <artifactId>ehcache-core</artifactId> <groupId>net.sf.ehcac

  • SpringBoot集成Shiro进行权限控制和管理的示例

    shiro apache shiro 是一个轻量级的身份验证与授权框架,与spring security 相比较,简单易用,灵活性高,springboot本身是提供了对security的支持,毕竟是自家的东西.springboot暂时没有集成shiro,这得自己配. 1 . 添加依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId

  • shiro无状态web集成的示例代码

    在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些REST风格的API,如果不使用OAuth2协议,就可以使用如REST+HMAC认证进行访问.HMAC(Hash-based Message Authentication Code):基于散列的消息认证码,使用一个密钥和一个消息作为输入,生成它们的消息摘要.注意该密钥只有客户端和服务端知道,其他第三方是不知道的.访问时使用该消息摘要进行传播,服务端

随机推荐