Spring与Shiro整合 静态注解授权

作者 : Stanley 罗昊

【转载请注明出处和署名,谢谢!】

使用Shiro的种类

首先,Shiro的授权方式共有三种;

1.编程式授权(不推荐)

2.注解式授权(普遍使用【力荐】)

注:第一个始于基于角色控制权限,就是你这个用户拥有那些权限;

第二个基于权限控制,判断你这个角色是否拥有这项权限,如果有给放行,如果没有被拦截;这个一般是判断数据库User表中会有一个权限列;

3.Jsp式授权(一般前端UI有对应解决方案)

注:jsp标签方式只是表面上不将此功能显示,但是如果有恶意用户绕过,直接输入ip地址+接口名称即可访问,所以必须配合后端一起使用;

了解授权(注解方式)

首先,我们在jsp页面上编写几个a标签:

我们看到了分别有增、改、删,这也就对应我们后台控制器(Conteoller)中mapping内的Url拦截地址:

我们现在开始将以上操作纳入Shiro管理;这一步,仅仅就是让这些Url纳入并被Shiro管理在Conteoller中声明;,

将Url交给Shiro管理

纳入很简单,只需要在这个接口上加上注解即可:

注:第一个始于基于角色控制权限,就是你这个用户拥有那些权限;

第二个基于权限控制,判断你这个角色是否拥有这项权限,如果有给放行,如果没有被拦截;这个一般是判断数据库User表中会有一个权限列【推荐】;

所以我们会用第二种,直接在用户请求这个接口之前,判断这个注解中的表达式,如果你有save那你就进来,如果没有,你就被拦截;

具体写法:

解析:其中,employee可以写成Controller的前缀名称:

Spring-Shiro.xml文件中配置

编写完注解后,我们依然需要将配置文件中加入一段代码:

1.开启Aop对类代理

我们可以看察觉到,我们的注解是不是都贴在Controller类内的方法上,在这个方法中,我们不需要注入或引入任何接口,原因就是我们需要在xml文件中配置,也可以这样理解,我们把需要引入的Jar包以及继承的接口都放入xml文件中;

2.开启Shiro注解支持

我们这个注解,我们贴上去并让它起到作用(权限控制)的话,就需要再此配置,详细说就是,第三方程序的依赖,Spirng本身没有,所以我们需要依赖第三方程序从而实现权限的控制;

注意:其中,上面的securityManager就是配置安全管理器的SecurityManager(同在Spring-Shiro.xml文件中):

配置上后,当用户登陆时,就会在登陆的前置下,进入到授权环节中,这就是运用了AOP的思想;

用户授权

这个时候我们的UserRealm授权块中是没有分配任何权限的,也就是登入进来的这个用户,是没有任何权限的,所以程序运行后,当用户点击进入该页面时,时,是无法进入报错(500);

当然,我们总不能出现权限不足的情况,就抛给用户报错信息,那自然是不对的,所以我们需要在Shiro.xml文件中再配置一句话,来表示,如果你权限不足,我会给你跳转到指定页面中去;

这段话的意思时,当你因为权限而抛异常时,请允许我跳转至nopermission.jsp这个页面中去;

分配权限(静态)

其实,在讲静态之前,以下这个步骤,依然可以从数据库中获取,需要从数据库中User表中多出一个列,这个列就是权限列表;

1.获取当前用户,就是获取当前登陆进来的这个用户

获取当前用户,其实就是你认证模块中,你放入的User对象:

首先,先获取当前用户,获取后,再从这个用户中获取他的权限,这个权限可以是数据库中你定义好的权限列表:

Spring与Shiro整合 静态注解授权的更多相关文章

  1. Spring与Shiro整合 登陆操作

    Spring与Shiro整合 登陆操作 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 编写登陆Controller方法  讲解: 首先,如果你登陆失败的时候,它会把你的异常信息丢到 ...

  2. Spring与Shiro整合 加载权限表达式

    Spring与Shiro整合 加载权限表达式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 如何加载权限表达式  我们在上章内容中画了一张图,里面有三个分项,用户 角色 权限: 那 ...

  3. Spring与Shiro整合

    Spring整合篇--Shiro 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Shiro? 链接:https://www.cnblogs.com/StanleyBlogs/ ...

  4. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  5. spring+hibernate+Struts2 整合(全注解及注意事项)

    最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar ...

  6. Spring+SpringMVC+mybatis整合以及注解的使用(三)

    1.包结构:

  7. Spring mvc shiro 整合

    参考 : http://www.360doc.com/content/14/0722/10/18637323_396209195.shtml http://www.360doc.com/content ...

  8. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  9. Spring+SpringMVC+Hibernate 与 shiro 整合步骤

    目录 1. 业务需求分析 2. 创建数据库 3. 创建 maven webapp 工程 4. 创建实体类(POJO) 5. 配置 Hibernate 和 Mapping 5.1 Hibernate 主 ...

随机推荐

  1. React中使用create-react-app创建项目,运行npm run eject建立灰度报错

    我在运行npm run eject建立测试环境和正式环境时候报错 这里的问题是是脚手架添加.gitgnore文件,但是却没有本地仓库,按照以下顺序就可以正常使用 git add . git commi ...

  2. python logger日志通用配置文件

    阅读须知⚠️ 1.示例代码可直接放在项目py文件中即可使用 2.project_name,logfile_name变量需根据你的项目进行修改 3.日志输出格式format选择(可根据你的需要替换或修改 ...

  3. 有效的减少代码中太多的if、else?-策略模式

    写这篇文章的目的和上一篇单例模式一样,策略模式也是一种常用的设计模式,太多的if-else不仅看着不太美观而且不好维护,对于自己来说也等于复习了一遍策略模式.先说一下策略 模式的定义: 策略模式封装了 ...

  4. JVM的类加载机制全面解析

    什么是类加载机制 JVM把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制. 如果你对Class文件的结 ...

  5. Flask入门学习——自定义一个url转换器

          我们知道,flask的url规则是可以添加变量部分的,这个参数变量是写在尖括号里的,比如:/item/<id>/,如果需要指出参数的类型要符合<converter:vai ...

  6. Java之Retry重试机制详解

    应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务上传数据后对返回的结果进行处理:第二步拿到第一步结 ...

  7. Linux:AWK基础

    AWK是一个强大的文本分析工具,算是Linux系统特别有用的命令了,在日志分析.文件内容分析中扮演特别重要的角色. AWK说明 简单来说awk就是把文件逐行的读入,以指定的分隔符将每行分割,分割后的部 ...

  8. Mac从拆箱到入门

    Mac从拆箱到入门   记录首次使用Mac的我的历程,不是专业的Mac使用教程,只是简单的记录.还有我在使用过程中一些用到的功能都一些小提示吧.  1.首次开机配置,对于一个完全的新手来说(也就是我) ...

  9. 在modelarts上部署mask-rcnn模型

    最近老山完成了对mask-rcnn在modelarts上的部署,部署模型来自于这个项目.部署的过程大体和我的上篇文章使用modelarts部署bert命名实体识别模型相似,许多细节也不在赘述.这篇文章 ...

  10. 一条Top10热销品牌MySQL语句

    表t_alibaba_data的数据结构如下: 各列含义分别是: 用户id(user_id),品牌id(brand_id),用户行为(type, 其中,点击为0,购买为1,加入收藏为2,加入购物车为3 ...