Shiros是我们开发中常用的用来实现权限控制的一种工具包,它主要有认证、授权、加密、会话管理、与Web集成、缓存等功能。我是从事javaweb工作的,我就经常遇到需要实现权限控制的项目,之前我们都是靠查询数据获取列表拼接展示的,还有的是及时的判断权限的问题的,现在有了Shiros了,我们就可以统一的进行设置权限问题,Shrios的实现也是很简单的,下面让我们来看看具体实现步骤

web.xml配置

因为我们是与spring进行集成的,而spring的基本就是web项目的xml文件。所以我们在web.xml中配置shiros的过滤拦截。正常情况下,我们需要将shiro的filter配置在所有的filter前面,当然和encodingFilter这个filter是不区分前后的。因为两者互相不影响的。

shiroFilter

org.springframework.web.filter.DelegatingFilterProxy

targetFilterLifecycle

true

shiroFilter

/*

好了,到这里shiro就集成到spring项目里面去了。What?对的,你妹看错,就这么简单,shiro就这一步就集成到项目里了。集成式集成了,但是想要完整的实现效果当然我们还是需要继续的往下配置的。在这里请记住我这里的shiroq过滤器的名字叫shiroFilter(后面有用的)。下面我们的shiro需要到spring的配置文件application.xml文件里去配置,在我的项目的我的spring配置文件是spring-service.xml。而在spring-service.xml中又引入了spring-shiro.xml,也就是说最后shiro的配置是配置在spring-shiro.xml文件中。

最终源码在最后下载

spring-shiro.xml

这里我们将来看看spring-shiro.xml的配置,这里我采取倒叙的方式讲解,我觉的倒叙更加的有助于我们理解代码。首先我们还记得在web.xml中配置的那个filter吧,名字shiroFilter,对spring-shiro.xml配置文件就是通过这个filter展开的。首先我们在web.xml配置的过滤器实际上是配置ShiroFilterFactoryBean,所以在这里需要将ShiroFilterFactoryBean定义为shiroFilter

/>

/statics/**=anon

/login.html=anon

/sys/schedule.html=perms[sys:schedule:save]

/sys/login=anon

/captcha.jpg=anon

/**=authc

具体的上面的代码注释已经解释的很清楚了,在这里主要讲解下filterChainDefinitions里面的设置属性。里面的value就是我们控制的页面权限设置。filterChainDefinitions的原则是按顺序查找一旦查找到符合的页面要求就不在继续查找了。所以我们需要将有通配符的页面设置在最后。上面配置中有/sys/schedule.html=perms[sys:schedule:save]

意思就是说访问schedule.html这个页面前提是你得有sys:schedule:save这个权限。至于这个权限在哪里配置。在这里先透露一下。在Realm中获取

在上面的配置我们securityManager属性是shiro 安全核心配置接口,这里需要我们自己填写,这里的配置就是需要我们实现我们的认证,因为不同的项目我们认证权限肯定是不一样的。所以这也是shiro给我们唯一为数不多的代码编写的接口,我们只需要在这接口提供我们自己的认证和角色权限分配就行了。

那么这里有出现了一个realm,这个realm就是我们实现权限和认证的地方。我们只需要通过spring将我们的实现类指定为realm即可

在讲UserRealm之前我们先来看看shir默认的realm逻辑是咋样的

通常我们只需要继承AuthorizingRealm(授权),因为AuthorizingRealm里面继承了AuthenticatingRealm(认证),所以我们只需要继承AuthorizingRealm(授权),我们就可以重写授权和认证两个方法了,这两个方法里面就实现权限管理操作。

首先来看看在认证登录中我们有哪些值得注意的地方

doGetAuthenticationInfo中实现登录认证出现的几种异常

UnknownAccountException:获取的user为空

LockedAccountException :此用户被锁住了

IncorrectCredentialsException : 密码不正确(建议提示为 用户名或密码错误。安全考虑)

ExcessiveAttemptsException : 密码错误次数太多(现在很多网站上都有相关的操作)

最后通过用户名+明文密码+Reaml中的getName进行用户信息组装

登录认证就这几点注意,其次就是权限分配了,doGetAuthorizationInfo(授权),在doGetAuthorizationInfo里我们通过PrincipalCollection这个身份集合,当我们只配置了一个Reaml的时候我们可以通过PrincipalCollection中的getPrimaryPrincipal方法获得刚刚传入的Reaml(用户名)就行了,但是当我们配置了多个Reaml的时候可以通过PrincipalCollection中的getRealmNames获取所有的Reaml的用户名就行了。

然后通过用户名去数据库获取权限菜单。最后返回一个带有角色和权限的 SimpleAuthorization的信息,意思就是一下角色具有哪些权限。如果就一个角色的时候也可以不指定角色,分别通过setStringPermissions(指定权限)+setRoles(指定角色)

到这里shiro的配置就完成了。

另外还有一点shiro的配置是处理shiro的生命周期和shiro的注解的启用的,这里就不解释了,直接上代码

spring-shiro.xml源码

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.2.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-4.2.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.2.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">

/>

/statics/**=anon

/login.html=anon

/sys/schedule.html=perms[sys:schedule:save]

/sys/login=anon

/captcha.jpg=anon

/**=authc

Shiro的其他权限过滤器及其用法

anon :org.apache.shiro.web.filter.authc.AnonymousFilter

/statics/**=anon :以statics开头的请求可以随便访问,没有权限

authc:org.apache.shiro.web.filter.authc.FormAuthenticationFilter

/**=authc :表示所有的请求都需要进行验证权限且权限通过才能放行

authcBasic:org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter

/admins/user/**=authcBasic :表示没有通过httpbasic认证的

perms:org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter

/admins/user/*=perms[user:add:] :上面已经解释过了,表示访问./admins/user/..

的请求必须是由use:add:*权限的才可以访问,否则重定向登录页面(这里的登录页面默认是web下的login.html,正常我们通过设置shiro中的filterChainDefinitions属性设置页面)。

port : org.apache.shiro.web.filter.authz.PortFilter

/admins/user/**=port[8081] :

当访问的请求端口不是8001时,则shiro会重定向到schemal://serverName:8081?queryString请求。这个请求中schemal是http或者https,serverName是我们原请求中的域名,8081就是我们port里设置端口号,queryString是我们原请求中携带的参数。

rest :org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter

/admins/user/**=rest[user] :

rest表示请求方法。相当于perms[user:method],这里method值得是post,get , delete.

roles :org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

/admins/user/**=roles[admin] :

这个和perms使用时一样的,只不过在后台我们是通过setRoles方法给用户设置角色的。

ssl : org.apache.shiro.web.filter.authz.SslFilter

/admins/user/**=ssl : 表示该请求是安全请求,协议是https

user : org.apache.shiro.web.filter.authc.UserFilter

/admins/user/**=user 表示必须存在用户,在登录操作是不进行检查的,因为登录的时候根本就不存在用户。

logout : org.apache.shiro.web.filter.authc.LogoutFilter

/admins/user/**=logout : 表示该请求是退出操作

注意!上面中roles,perms,rest这三个里面是可以带参数的,如果有多个参数参数之间必须用英文装填下的逗号分隔。在页面中判断是所有参数都满足才算是满足的。

以上是自己根据别的文章加上自己认识总结,参考一下文章

java shirofilter_Spring项目集成ShiroFilter简单实现权限管理相关推荐

  1. Java毕设项目信管专业毕业生就业管理信息系统计算机(附源码+系统+数据库+LW)

    Java毕设项目信管专业毕业生就业管理信息系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm ...

  2. Java毕设项目疫情期间中小学生作业线上管理系统设计与实现(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目疫情期间中小学生作业线上管理系统设计与实现(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...

  3. 1)Java web项目配置(最简单的javaweb项目)

    Java web示例一 1.创建一个简单的Maven 项目 2.在webapp/WEB-INF下创建两个文件夹classes和lib,classes用来存放编译后输出的classes文件,lib用于存 ...

  4. Spring Security认证授权练手小项目 腾讯视频VIP权限管理功能

    腾讯视频VIP权限管理 1.项目功能视频演示 2.需求与设计 1.需求 2.功能概要 3.接口设计 3.项目源码结构 4.项目源码下载 5.项目部署 1.部署架构 2.数据库环境准备 3.redis环 ...

  5. java linux 权限管理_权限管理java实现(源于Linux中的权限管理算法)

    这个帖子由来已久吧,我也是到处搜到的,然后仔细学习,果然博大精深,然后加强点弄点自己的东西 我已声明 部分转载!! 向大家介绍一种很不错,也是Linux中的权限管理算法. 定义a^b为:a的b次方 假 ...

  6. 【VUE项目实战】32、权限管理-实现角色列表

    接上篇<31.权限管理-实现权限列表> 上个阶段我们完成了权限管理模块,本篇我们来介绍用户.角色和权限三者的关系,并完成角色管理列表模块. 一.权限管理业务分析 通过权限管理模块,控制不同 ...

  7. springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】

    项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  8. Java入门项目:实现简单学生管理系统(逐个功能详解版)

    文章目录 前言 一.学生管理系统实现思路 二.定义学生类 三.主界面的代码编写 四.添加学生的代码编写 五.查看所有学生的代码编写 六.删除学生的代码编写 七.修改学生的代码编写 八.项目结构和源码 ...

  9. java web相册_javaWEB之-----------简单的相册管理

    相册管理 这仅仅只是一个小小的相册管理,主要实现的功能:能够实现对图片的上传,统一浏览,单个下载,单个删除,只能删除自己上传的文件. 现在对每个功能进行单个的解释: 图片的上传 图片的上传在之前的博客 ...

最新文章

  1. isk麦克风安装教程_得胜麦克风怎么样?isk的麦克风怎么样?屁颠虫麦克风使用教程?得胜PC电容麦克风详细拆解...
  2. ASP.NET页面生命周期描述
  3. 通用扩展函数--类型转换
  4. android 开发小工具,Android 开发者必备的八款小工具
  5. 10taskkill无法终止进程_?进程的状态转换
  6. Python学到什么程度可以面试工作?
  7. B1007 素数对猜想
  8. 猜1-10的数字python脚本
  9. 用SonBuddy搭建无线局域网,共享上网。(SONBuddy常见问题,无线组网,共享,上网,笔记本)...
  10. -bash: ifconfig: 未找到命令
  11. 大数据在电力行业的应用前景有哪些?
  12. 2018美赛 A 题
  13. 从金蝶k3到金税盘_金蝶K3操作流程(全篇)
  14. matlab怎么排序数组,如何在MATLAB中排序结构数组?
  15. chipsel语言_英语快速记忆法视频
  16. 详解:分治算法【Java实现】——汉诺塔问题
  17. 将数据表的纵向数据横向显示
  18. Util-linux
  19. 【电源专题】开关电源的控制器和稳压器的区别
  20. 怎么使用计算机播放音乐,怎么给电脑设置默认音乐播放器

热门文章

  1. 刷bios工具_微星主板怎么更新bios版本?微星主板更新BIOS版本图文教程
  2. 的driver_Spark源码解析(三)----Driver启动、注册Application
  3. 【2017年第2期】深度学习在化学信息学中的应用(下)
  4. 笨小猴(洛谷P1125题题解,Java语言描述)
  5. 选数(洛谷P1036题题解,Java语言描述)
  6. centos7 编译安装mysql-5.7.18
  7. 【bzoj2761】【JLOI2011】【不反复数字】【平衡树】
  8. 使用Fiddler对android应用抓包 专题
  9. div+css使多行文字垂直居中?
  10. (绝对有用)iOS获取UUID,并使用keychain存储