医药采购项目yycg-day07笔记-shiro_第1页
医药采购项目yycg-day07笔记-shiro_第2页
医药采购项目yycg-day07笔记-shiro_第3页
医药采购项目yycg-day07笔记-shiro_第4页
医药采购项目yycg-day07笔记-shiro_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目第七天 用户认证实现 shiro授权入门1 课程计划1、用户认证功能实现(重点)1)用户登陆,使用shiro完成2)用户退出功能3)将用户身份信息存储到session中,从session中获取 使用shiro的api存储session(由shiro管理session)2、技术预研-shiro的授权流程认证是什么? 当用户访问系统时候,系统校验用户的身份是否合法,如果合法继续访问,否则强制用户去认证(登陆)。授权是什么? 当用户认证通过了,用户访问系统资源(url链接、用户信息、按钮。)系统校验用户是否拥有该资源的访问资源,如果有权限继续访问,否则拒绝访问。 理解shiro的授权流程!2 回顾 shiro认证流程2.1 shiro关键对象shiro框架作用:实现认证和授权。认证是什么? 当用户访问系统时候,系统校验用户的身份是否合法,如果合法继续访问,否则强制用户去认证(登陆)。授权是什么? 当用户认证通过了,用户访问系统资源(url链接、用户信息、按钮。)系统校验用户是否拥有该资源的访问权限,如果有权限继续访问,否则拒绝访问。1、安全管理器 securityManager实现认证和授权,一个门面。2、认证器 Authenticator负责认证3、授权器 Authorizer负责授权4、realm 领域realm访问数据库,查询一些信息。Authenticator认证器在认证时候,调用realm根据账号(用户名)查询数据库中用户表,得到一个正确的密码 。Authorizer授权在授权时候,调用realm根据账号查询该用户的所有权限。2.2 shiro认证流程3 用户认证功能实现3.1 分析如果不使用shiro,认证的功能怎么实现?可以使用Filter过虑器。认证的功能:用户访问系统,系统拦截用户的请求,校验用户身份是否合法。使用shiro在b/s系统上进行认证,shiro基于过虑器实现,shiro提供很多过虑器来实现。过虑器比如:匿名过虑器(只要被此过虑器拦截,就放行)、认证过虑器(只要被拦截,校验session中是否有用户身份,如果有则放行,否则强制用户去认证)、退出 过虑器(只要被拦截,自动清空session)3.2 添加shiro的jar包添加yycg-web或yycg-framework中。3.3 配置shiro过虑器3.3.1 web.xml中配置过虑器DelegatingFilterProxyshiroFilterorg.springframework.web.filter.DelegatingFilterProxytargetFilterLifecycletruetargetBeanNameshiroFiltershiroFilter/*3.3.2 在spring容器配置shiroFilter在yycg-web创建applicationContext-shiro.xlm3.3.3 配置过虑器链儿shiro提供很多的过虑器:anon:过虑器名称 匿名过虑器,只要被拦截就放行,允许匿名访问认证过虑器:authc:认证过虑器名称 ,只要被它拦截校验session中是否有用户身份信息,如果有则放行,如果没有跳转到登陆页面退出 过虑器,只被拦截就清空session.配置过虑链儿:3.3.4 过虑器小结3.4 登陆页面显示在shiro的filter去配置login.jsp,shiro拦截用户请求,如果用户没有认证,自动跳转到login.jsp3.4.1 配置安全管理器在applicationContext-shiro.xml配置3.4.2 配置realm先用上节课写的测试realm3.4.3 配置sessionManagershiro有自己一套session管理机制,配置sessionManager会话管理器3.4.4 配置login.jsp登陆地址在applicationContext-shiro.xml配置login.jsp登陆地址3.4.5 写一个login.jsp文件3.4.6 测试向yycg-web中添加perties 显示日志验证码不显示:跟踪浏览器请求,验证码请求被拦截验证码不能被拦截,需要在applicationContext-shiro.xml添加匿名过虑器3.5 实现用户登陆(realm暂不连接数据库)3.5.1 login.action用户在登陆页面输入账号和密码 点击登陆,请求login.action定义一个LoginAction类,此继承BaseAction如果不指定模型对象类型,baseAction会抛出异常,不想抛出异常,注释掉BaseAction中抛出异常代码配置login.action在yycg-web中配置3.5.2 login.jsp用户输入账号和密码 进行ajax提交3.5.3 调试1、点击登陆没有响应,通过观察,也请求了,被拦截了解决,配置过虑器链2、修改了baseAction代码,没有起作用因为yycg-web依赖yycg-framework,运行yycg-web自动从本地仓库找yycg-framework解决1:将yycg-framework install 发布本地仓库。解决2:(最终解决方案)采用聚合运行,将yycg-framework进行聚合运行3.5.4 处理UnknownAccountException如果用户账号不存在,由shiro框架抛出异常UnknownAccountException在异常处理器处理UnknownAccountException 3.5.5 处理IncorrectCredentialsException如果密码错误,由shiro框架抛出异常IncorrectCredentialsException在异常处理器处理IncorrectCredentialsException3.5.6 登陆成功后返回json结果在LoginAction中的login方法最后,添加返回结果信息3.6 用户退出 分析 shiro提供一个退出的过虑器,退出 功能不用开发了。只需要配置logout退出过虑器即可3.6.1 首页点退出 重定向到auth/logout.action3.6.2 配置退出过虑器3.7 realm连接数据库3.7.1 分析1、根据输入的用户名连接数据库查询用户信息2、查询数据库取出用户信息得到一个用户身体对象,最终认证通过后将此对象放入session3.7.2 dao1、根据输入的用户名连接数据库查询用户信息在SysUserDao中添加:3.7.3 service1、根据输入的用户名连接数据库查询用户信息2查询数据库取出用户信息得到一个用户身体对象创建ActiveUser类型添加SysuserService中添加方法/创建用户身份信息对象public ActiveUser createActiveUser(String userId)ActiveUser activeUser = new ActiveUser();/查询用户SysUser sysUser = sysUserDao.findById(userId);activeUser.setId(sysUser.getId();/用户idactiveUser.setUsername(sysUser.getUsername();activeUser.setUsercode(sysUser.getUsercode();activeUser.setGroupid(sysUser.getSysDictInfoByGroupid().getId();/对应数据字典的idactiveUser.setGroupname(sysUser.getSysDictInfoByGroupid().getInfo();/对应数据字典的名称字段infoString sysid = null;/单位idString sysmc = null;/单位名称/根据用户类型获取单位的id和单位名称/用户类型idString groupid = sysUser.getSysDictInfoByGroupid().getId();if(groupid.equals(s0101) | groupid.equals(s0102)/监管单位/得到监管单位对象DwWsy dwWsy = sysUser.getDwWsy();sysid = dwWsy.getId();/单位idsysmc = dwWsy.getMc();/单位名称else if(groupid.equals(s0103)/卫生室单位/得到监管单位对象DwWss dwWss = sysUser.getDwWss();sysid = dwWss.getId();/单位idsysmc = dwWss.getMc();/单位名称else if(groupid.equals(s0104)/供应商单位/得到监管单位对象DwGys dwGys = sysUser.getDwGys();sysid = dwGys.getId();/单位idsysmc = dwGys.getMc();/单位名称activeUser.setSysid(sysid);activeUser.setSysmc(sysmc);return activeUser;3.7.4 realm3.8 当前用户信息显示3.8.1 分析shiro完成认证后自动将用户身份对象放入session;通过api获取当前session 信息在FirstAction的方法中通过shiro的api得到当前session中用户身份信息,放入值栈,页面从值栈获取 FirstAction3.8.2 first.jsp从值栈取出用户信息访问值栈的数据,属性.属性.属性.3.8.3 小结获取session的用户身体对象4 shiro授权入门4.1 什么是授权授权是什么? 当用户认证通过了,用户访问系统资源(url链接、用户信息、按钮。)系统校验用户是否拥有该资源的访问权限,如果有权限继续访问,否则拒绝访问。4.2 授权流程授权:系统校验用户是否有权限的过程。who:用户,subjectwhat:资源(名词),resources,比如:用户信息 how:权限(动词+名词),permission 比如:删除用户资源-权限:一个资源有多个权限。用户-权限:一个用户有多个权限4.3 权限数据模型(重点)要给用户分配权限,将分配的权限写入数据库的表中。创建6张表:用户:系统的用户信息角色:用户的分类,为了方便给用户分配权限,将给角色分权限,再给用户分配角色,用户拥有了角色下的权限。资源:(资源名称、资源id.)系统的资源(用户信息、系统页面的按钮。)权限:(权限名称、资源名称、资源id)针对资源的访问权限,比如:删除用户、修改用户。给角色分配权限,建立角色权限的关系表,角色-权限:多对多用户-角色:多对多企业开发,将资源和权限信息合并,得到一个标准的权限模型(5张表)用户表:sys_user 存储系统用户信息(账号、密码。)角色表:sys_role权限表:sys_permission存储了系统中所有资源的权限。存储三部分信息:1)一级菜单2)二级菜单3)权限先给角色分权限创建角色权限关系表:sys_role_permission角色-权限:多对多先给用户分配角色:sys_user_role外键所在表为子表, 子表指向父表。用户-角色:多对多角色-权限:多对多4.4 权限表的应用-给用户分配一个权限1、确定要给哪个用户分配权限2、创建卫生室的角色3、创建一个权限1)添加一个一级菜单2)添加一个二级菜单 3)添加三级权限4)给角色分配权限5)给用户分配角色4.5 权限表的应用-查询用户的权限4.6 分配的功能介绍开发如下功能:1、用户的增删改查。2、角色的增删改查3、权限的增删改查.4、给角色分配权限。5、给角色分配角色。工作量很大。4.7 shiro 授权流程4.7.1 基本概念-粗颗粒和细颗粒粗颗粒权限:功能级别的权限。用户查询就是功能级别的权限。用户01和用户02都有用户查询。细颗粒权限:数据级别的权限。 用户01是卫生室,只能查询本卫生室的下的用户信息。 用户02是卫生局,只能查询所有用户。shiro框架主要控制粗颗粒权限。细颗粒权限建议放在service单独实现!4.7.1 基本概念-RBAC早期:现在:建议使用基于资源的访问控制,不管用户的角色是什么,最终拿 用户的权限,如果用户有权限就可以访问资源。shiro框架实现基于角色的授权、基于资源(权限)的授权。建议基于资源的授权。4.7.2 权限标识符shiro要求权限名称定义按照规则:符号包括三部分:资源名称、操作、资源实例删除001用户的权限:user:delete:001删除用户的权限:user:delete、或user:delete:*查询用户权限:user:queryuser程序员开发一个功能后,要定义此功能的权限标识符。4.7.3 realm授权进行授权时候,调用realm获取用户的所有权限4.7.4 测试程序5 总结1、用户认证功能实现1)理解shiro使用自定义realm进行认证流程2)realm定义方法作什么事a/根据账号查询数据库,如果查询不到返回NULL,认证授权抛出异常b/查询到用户的正确密码给认证

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论