shiro权限控制入门

  1 一:权限控制两种主要方式
  2     粗粒度 URL 级别权限控制和细粒度方法级别权限控制
  3     1.粗粒度 URL 级别权限控制
  4         可以基于 Filter 实现在数据库中存放 用户、权限、访问 URL 对应关系, 当前用户访问一个 URL 地址,查
  5         询数据库判断用户当前具有权限,是否包含这个 URL,如果包含允许访问,如果不包含权限不足
  6     2.粗粒度 URL 级别权限控制和
  7         可以代理、自定义注解实现, 访问目标对象方法,在方法上添加权限注解信息,对目标对象创建代理对象,
  8         访问真实对象先访问代理对象,在代理对象查询数据库判断是否具有注解上描述需要权限,具有权限 允许访问,
  9         不具有权限,拦截访问,提示权限不足
 10 二:权限控制相关数据表
 11     实体 : 用户、角色、权限(他们之间都是多对多的关系)
 12     用户: 系统登录用户 User
 13     权限: 描述权限信息 (粗粒度权限控制,可能在权限表描述访问资源 URL 信息)
 14     Permission
 15     角色: 方便用户进行授权, 角色就是权限的集合 Role
 16     用户 *---* 角色 *---* 权限 ==> 建立 至少5 张数据表
 17     Menu 菜单, 为了方便进行动态菜单管理 , 为不同用户定制不同系统菜单
 18     不同用户系统菜单,可以根据用户角色 进行管理 角色 * --- * 菜单
 19 三:建立实体类创建对应的数据库表
 20 四:ApacheShiro  框架入门
 21     1.Apache Shiro框架简介和下载导入
 22         官网: http://shiro.apache.org/
 23     2.Apache Shiro 体系结构
 24         2.1Authentication 认证 ---- 用户登录,身份识别 who are you?
 25         2.2Authorization 授权 --- 用户具有哪些权限、角色 what can you do ?
 26         2.3Cryptography 安全数据加密
 27         2.4Session Management 会话管理
 28         2.5Web Integration web 系统集成
 29         2.6Interations 集成其它应用,spring、缓存框架
 30     3.导入对应的jar包
 31         <!-- 权限控制 框架 -->
 32         <dependency>
 33             <groupId>org.apache.shiro</groupId>
 34             <artifactId>shiro-all</artifactId>
 35             <version>${shiro.version}</version>
 36         </dependency>
 37     4.参考官方文档:Apache_Shiro_reference(中文版).pdf
 38     5.Apache Shiro执行过程分析和权限控制主要方式
 39         5.1Shiro运行主要运行流程:
 40             ApplicationCode 用户编写代码
 41             Subject 就是 shiro 管理的用户
 42             SecurityManager 安全管理器,是 shiro 权限控制核心对象, 在编程时,只需要操作
 43             Subject 方法, 底层调用 SecurityManager 方法,无需直接编程操作 SecurityManager
 44             Realm 应用程序和安全数据之间连接器 ,应用程序 进行权限控制读取安全数据(数据
 45             表、文件、网路 … ),通过 Realm 对象完成
 46             登录流程: 应用程序 --- Subject --- SecurityManager --- Realm --- 安全数据
 47         5.2Shiro进行权限控制
 48             四种主要方式 :
 49             1、 在程序中 通过 Subject 编程方式进行权限控制
 50             2、 配置 Filter 实现 URL 级别粗粒度权限控制
 51             3、 配置代理,基于注解实现细粒度权限控制
 52             4、 在页面中使用 shiro 自定义标签实现 页面显示权限控制
 53     6.用户登录功能的实现
 54         6.1配置shiro的Filter实现URL级别权限控制
 55             6.1.1配置web.xml
 56                 <!-- shiro的Filter  -->
 57                 <filter> 
 58                     <!-- 去spring配置文件中寻找同名bean  -->
 59                     <filter-name>shiroFilter</filter-name>
 60                     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
 61                 </filter>
 62                 <filter-mapping>
 63                     <filter-name>shiroFilter</filter-name>
 64                     <url-pattern>/*</url-pattern>
 65                 </filter-mapping>
 66             6.1.2配置applicationContext-shiro.xml
 67                 <!-- 配置Shiro核心Filter  --> 
 68                 <bean id="shiroFilter" 
 69                     class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
 70                     <!-- 安全管理器 -->
 71                     <property name="securityManager" ref="securityManager" />
 72                     <!-- 未认证,跳转到哪个页面  -->
 73                     <property name="loginUrl" value="/login.html" />
 74                     <!-- 登录页面页面 -->
 75                     <property name="successUrl" value="/index.html" />
 76                     <!-- 认证后,没有权限跳转页面 -->
 77                     <property name="unauthorizedUrl" value="/unauthorized.html" />
 78                     <!-- shiro URL控制过滤器规则  -->
 79                     <property name="filterChainDefinitions">
 80                         <value>
 81                             /login.html* = anon
 82                             /user_login.action* = anon 
 83                             /validatecode.jsp* = anon
 84                             /css/** = anon
 85                             /js/** = anon
 86                             /images/** = anon
 87                             /services/** = anon 
 88                             /pages/base/courier.html* = perms[courier:list]
 89                             /pages/base/area.html* = roles[base]
 90                             /** = authc
 91                         </value>
 92                     </property>
 93                 </bean>
 94                 <!-- 安全管理器  -->
 95                 <bean id="securityManager" 
 96                     class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
 97                     <property name="realm" ref="bosRealm" />
 98                 </bean>
 99                 <bean id="lifecycleBeanPostProcessor"
100                     class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
101         6.2过滤器的参考配置
102             anon 未认证可以访问
103             authc 认证后可以访问
104             perms 需要特定权限才能访问
105             roles 需要特定角色才能访问
106             user 需要特定用户才能访问
107             port 需要特定端口才能访问
108             reset 根据指定 HTTP 请求访问才能访问
109         6.3用户登录(认证)功能实现(代码编写)
110             编写 UserAction 提供 login 登录方法
111             创建subject对象-->创建token对象用来保存用户输入的数据-->调用subject对象的login方法实现认证登录成功
112             编写realm类提供shiro的认证管理(doGetAuthenticationInfo)
113             和授权管理(doGetAuthorizationInfo)(让其继承extends AuthorizingRealm即可实现)
114             认证管理:将token转换为UsernamePasswordToken-->接着从token中获取当前登录用户的用户名和密码
115             -->根据用户的用户名查询数据库,获取用户对象(判断是否存在在数据库中)-->不存在retuurn null、
116             存在return new SimpleAuthenticationInfo(user, user.getPassword(),getName());-->交由securityManager处理
117             授权管理:创建SimpleAuthorizationInfo授权对象-->获取当前的用户对象(利用subject.getPrincipal();)
118             -->查询当前用户的所有角色和权限(通过数据jpa获取)-->获取到的用户角色和权限信息
119             添加到SimpleAuthorizationInfo授权对象中并且返回交由securityManager处理具体的授权模块
120         6.4用户注销功能实现
121             只需调用subject的logout()方法即可注销当前登录用户保存在shiro的签名信息中的数据
122     7.细粒度的基于method的注解式权限管理的实现和jsp页面控制权限菜单的显示参考www.baidu.com;
原文地址:https://www.cnblogs.com/yshang/p/8179316.html