一:权限控制两种主要方式
粗粒度 URL 级别权限控制和细粒度方法级别权限控制
1.粗粒度 URL 级别权限控制
可以基于 Filter 实现在数据库中存放 用户、权限、访问 URL 对应关系, 当前用户访问一个 URL 地址,查
询数据库判断用户当前具有权限,是否包含这个 URL,如果包含允许访问,如果不包含权限不足
2.粗粒度 URL 级别权限控制和
可以代理、自定义注解实现, 访问目标对象方法,在方法上添加权限注解信息,对目标对象创建代理对象,
访问真实对象先访问代理对象,在代理对象查询数据库判断是否具有注解上描述需要权限,具有权限 允许访问,
不具有权限,拦截访问,提示权限不足
二:权限控制相关数据表
实体 : 用户、角色、权限(他们之间都是多对多的关系)
用户: 系统登录用户 User
权限: 描述权限信息 (粗粒度权限控制,可能在权限表描述访问资源 URL 信息)
Permission
角色: 方便用户进行授权, 角色就是权限的集合 Role
用户 *---* 角色 *---* 权限 ==> 建立 至少5 张数据表
Menu 菜单, 为了方便进行动态菜单管理 , 为不同用户定制不同系统菜单
不同用户系统菜单,可以根据用户角色 进行管理 角色 * --- * 菜单
三:建立实体类创建对应的数据库表
四:ApacheShiro 框架入门
1.Apache Shiro框架简介和下载导入
官网: http://shiro.apache.org/
2.Apache Shiro 体系结构
2.1Authentication 认证 ---- 用户登录,身份识别 who are you?
2.2Authorization 授权 --- 用户具有哪些权限、角色 what can you do ?
2.3Cryptography 安全数据加密
2.4Session Management 会话管理
2.5Web Integration web 系统集成
2.6Interations 集成其它应用,spring、缓存框架
3.导入对应的jar包
<!-- 权限控制 框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>${shiro.version}</version>
</dependency>
4.参考官方文档:Apache_Shiro_reference(中文版).pdf
5.Apache Shiro执行过程分析和权限控制主要方式
5.1Shiro运行主要运行流程:
ApplicationCode 用户编写代码
Subject 就是 shiro 管理的用户
SecurityManager 安全管理器,是 shiro 权限控制核心对象, 在编程时,只需要操作
Subject 方法, 底层调用 SecurityManager 方法,无需直接编程操作 SecurityManager
Realm 应用程序和安全数据之间连接器 ,应用程序 进行权限控制读取安全数据(数据
表、文件、网路 … ),通过 Realm 对象完成
登录流程: 应用程序 --- Subject --- SecurityManager --- Realm --- 安全数据
5.2Shiro进行权限控制
四种主要方式 :
1、 在程序中 通过 Subject 编程方式进行权限控制
2、 配置 Filter 实现 URL 级别粗粒度权限控制
3、 配置代理,基于注解实现细粒度权限控制
4、 在页面中使用 shiro 自定义标签实现 页面显示权限控制
6.用户登录功能的实现
6.1配置shiro的Filter实现URL级别权限控制
6.1.1配置web.xml
<!-- shiro的Filter -->
<filter>
<!-- 去spring配置文件中寻找同名bean -->
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6.1.2配置applicationContext-shiro.xml
<!-- 配置Shiro核心Filter -->
<bean id="shiroFilter"
class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 安全管理器 -->
<property name="securityManager" ref="securityManager" />
<!-- 未认证,跳转到哪个页面 -->
<property name="loginUrl" value="/login.html" />
<!-- 登录页面页面 -->
<property name="successUrl" value="/index.html" />
<!-- 认证后,没有权限跳转页面 -->
<property name="unauthorizedUrl" value="/unauthorized.html" />
<!-- shiro URL控制过滤器规则 -->
<property name="filterChainDefinitions">
<value>
/login.html* = anon
/user_login.action* = anon
/validatecode.jsp* = anon
/css/** = anon
/js/** = anon
/images/** = anon
/services/** = anon
/pages/base/courier.html* = perms[courier:list]
/pages/base/area.html* = roles[base]
/** = authc
</value>
</property>
</bean>
<!-- 安全管理器 -->
<bean id="securityManager"
class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="bosRealm" />
</bean>
<bean id="lifecycleBeanPostProcessor"
class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
6.2过滤器的参考配置
anon 未认证可以访问
authc 认证后可以访问
perms 需要特定权限才能访问
roles 需要特定角色才能访问
user 需要特定用户才能访问
port 需要特定端口才能访问
reset 根据指定 HTTP 请求访问才能访问
6.3用户登录(认证)功能实现(代码编写)
编写 UserAction 提供 login 登录方法
创建subject对象-->创建token对象用来保存用户输入的数据-->调用subject对象的login方法实现认证登录成功
编写realm类提供shiro的认证管理(doGetAuthenticationInfo)
和授权管理(doGetAuthorizationInfo)(让其继承extends AuthorizingRealm即可实现)
认证管理:将token转换为UsernamePasswordToken-->接着从token中获取当前登录用户的用户名和密码
-->根据用户的用户名查询数据库,获取用户对象(判断是否存在在数据库中)-->不存在retuurn null、
存在return new SimpleAuthenticationInfo(user, user.getPassword(),getName());-->交由securityManager处理
授权管理:创建SimpleAuthorizationInfo授权对象-->获取当前的用户对象(利用subject.getPrincipal();)
-->查询当前用户的所有角色和权限(通过数据jpa获取)-->获取到的用户角色和权限信息
添加到SimpleAuthorizationInfo授权对象中并且返回交由securityManager处理具体的授权模块
6.4用户注销功能实现
只需调用subject的logout()方法即可注销当前登录用户保存在shiro的签名信息中的数据
7.细粒度的基于method的注解式权限管理的实现和jsp页面控制权限菜单的显示参考www.baidu.com;

shiro权限控制入门的更多相关文章

  1. shiro权限控制的简单实现

    权限控制常用的有shiro.spring security,两者相比较,各有优缺点,此篇文章以shiro为例,实现系统的权限控制. 一.数据库的设计 简单的五张表,用户.角色.权限及关联表: CREA ...

  2. Spring boot后台搭建二为Shiro权限控制添加缓存

    在添加权限控制后,添加方法 查看 当用户访问”获取用户信息”.”新增用户”和”删除用户”的时,后台输出打印如下信息 , Druid数据源SQL监控 为了避免频繁访问数据库获取权限信息,在Shiro中加 ...

  3. Spring boot后台搭建二集成Shiro权限控制

    上一篇文章,实现了用户验证 查看,接下来实现下权限控制 权限控制,是管理资源访问的过程,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等 Apache Shir ...

  4. shiro权限控制配置

    shiro配置流程 web.xml中配置shiro的filter spring中配置shiro的过滤器工厂,指定对不同地址权限控制 , 传入安全管理器 配置安全管理器,传入realm,realm中定义 ...

  5. shiro权限管理入门程序

    最近在学shiro,觉得入门程序还是有用的,记下来防止遗忘,也可供大家参考. package cn.itcast.shiro.authentication; import org.apache.shi ...

  6. Shiro权限控制框架

    Subject:主体,可以看到主体可以是任何可以与应用交互的"用户": SecurityManager:相当于SpringMVC中的DispatcherServlet或者Strut ...

  7. shiro权限控制

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  8. JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用

    实现在FreeMarker模板中控制对应按钮的显示隐藏主要用到了Shiro中的hasRole, hasAnyRoles, hasPermission以及Authenticated等方法,我们可以实现T ...

  9. shiro权限控制(一):shiro介绍以及整合SSM框架

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

随机推荐

  1. HDU6333-2018ACM暑假多校联合训练1002-Harvest of Apples-莫队+费马小定理

    题意很简单啦,求S(n,m)的值 通过打表我们可以知道 S(n + 1, m) = S(n, m) * 2 - C(n, m); S(n - 1, m) = (S(n, m) + C(n - 1, m ...

  2. centos6.5 命令行配置无线上网

    1.驱动下载地址: RTL8188无线网卡驱动下载 链接:https://pan.baidu.com/s/1ms-EbQCDxa76jPhYUPmr9Q 密码:r2vu 2.安装步骤: [root@c ...

  3. [ActionScript 3.0] 处理xml内容换行时行间距较大问题的一种简单方法

    我们一定遇到过这种情况,在读取xml里的文章内容时,一旦有换行的位置在flash里显示出来的行间距会比较大,而并非我们想要的效果,解决这个问题的方法除了使用正则表达式以外,这里介绍一种比较简单的方法, ...

  4. selenium自动加载Flash

    当我们在定位的时候,有时候会碰到Flash问题导致无法定位到元素 通过下面的代码就能解决问题 参考:https://blog.csdn.net/qq_37913997/article/details/ ...

  5. 利用COOKIE保存历史浏览商品的一个简单思路

    <?php //如是COOKIE 里面不为空,则往里面增加一个商品ID if (!empty($_COOKIE['SHOP']['history'])){ //取得COOKIE里面的值,并用逗号 ...

  6. Celery 分布式任务队列快速入门 以及在Django中动态添加定时任务

    Celery 分布式任务队列快速入门 以及在Django中动态添加定时任务 转自 金角大王 http://www.cnblogs.com/alex3714/articles/6351797.html ...

  7. WIndows下 Pycharm 配置Anaconda和TensorFlow

    1安装PyCharm 前提安装Python,然后去官网下载PyCharm 2 安装Anaconda 在官网下载Anaconda,并安装 下载好之后就跟安装一般的软件没啥区别,选择自己安装的文件夹,下一 ...

  8. du及df命令的使用

    在本文中,我将讨论 du 和 df 命令.du 和 df 命令都是 Linux 系统的重要工具,来显示 Linux 文件系统的磁盘使用情况.这里我们将通过一些例子来分享这两个命令的用法. du 命令 ...

  9. 同步FIFO学习

    在网上找的一个经典同步FIFO例子. 一.前言 FIFO (First-In-First-Out) 是一种先进先出的数据交互方式,在数字ASIC设计中常常被使用.FIFO按工作时钟域的不同又可以分为: ...

  10. RHCE 入门 第一篇

    随着工作压力越来越大,我们越需要技术储备. 从2017年10月14日开始参加RHCE培训