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;
相关文章
相关标签/搜索