欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    shiro课堂笔记.pdf

    • 资源ID:7707428       资源大小:7.35MB        全文页数:28页
    • 资源格式: PDF        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    shiro课堂笔记.pdf

    shiro 第二天shiro 授权 shiro 和企业项目整合开发1 复习什么是权限管理?权限管理是系统的安全范畴,要求必须是合法的用户才可以访问系统(用户认证),且必须具有该资源的访问权限才可以访问该资源(授权)。认证:对用户合法身份的校验,要求必须是合法的用户才可以访问系统。授权:访问控制,必须具有该资源的访问权限才可以访问该资源。权限模型:标准权限数据模型包括:用户、角色、权限(包括资源和权限)、用户角色关系、角色权限关系。权限分配:通过UI 界面方便给用户分配权限,对上边权限模型进行增、删、改、查操作。权限控制:基于角色的权限控制:根据角色判断是否有操作权限,因为角色的变化性较高,如果角色修改需要修改控制代码,系统可扩展性不强。基于资源的权限控制:根据资源权限判断是否有操作权限,因为资源较为固定,如果角色修改或角色中权限修改不需要修改控制代码,使用此方法系统可维护性很强。建议使用。权限管理的解决方案:对于粗颗粒权限管理,建议在系统架构层面去解决,写系统架构级别统一代码(基础代码)。粗颗粒权限:比如对系统的url、菜单、 jsp 页面、页面上按钮、类方法进行权限管理,即对资源类型进行权限管理。对于细颗粒权限管理:粗颗粒权限:比如用户id 为 001 的用户信息(资源实例)、类型为t01 的商品信息(资源实例),对资源实例进行权限管理,理解对数据级别的权限管理。细颗粒权限管理是系统的业务逻辑,业务逻辑代码不方便抽取统一代码,建议在系统业务层进行处理。基于 url 的权限管理(掌握) :企业开发常用的方法,使用web 应用中 filter 来实现,用户请求url,通过 filter 拦截,判断用户身份是否合法(用户认证) ,判断请求的地址是否是用户权限范围内的url(授权 )。shiro:shiro 是一个权限管理框架,是apache 下的开源项目。相比spring security 框架更简单灵活,spring security 对spring 依赖较强。 shiro 可以实现 web 系统、 c/s、分布式等系统权限管理。shiro 认证流程:(掌握)1、subject(主体 )请求认证,调用subject.login(token) 2、SecurityManager ( 安全管理器 )执行认证3、SecurityManager 通过 ModularRealmAuthenticator进行认证。4、ModularRealmAuthenticator将 token 传给 realm, realm 根据 token 中用户信息从数据库查询用户信息(包括身份和凭证)5、realm 如果查询不到用户给ModularRealmAuthenticator返回 null,ModularRealmAuthenticator抛出异常 (用户不存在)6、realm 如果查询到用户给ModularRealmAuthenticator返回 AuthenticationInfo( 认证信息 ) 7、ModularRealmAuthenticator拿着 AuthenticationInfo( 认证信息 )去进行凭证(密码)比对。如果一致则认证通过,如果不致抛出异常(凭证错误)。subject :主体Authenticator :认证器(shiro 提供)realm(一般需要自定义) :相当于数据源,认证器需要realm 从数据源查询用户身份信息及权限信息。2 课程安排1、shiro 授权通过测试代码讲解基于角色权限控制,基于资源的权限控制(掌握)2、shiro 与 spring 进行整合项目框架springmvc+mybatis+shiro 3、在整合工程下学习:认证授权sessionManager 缓存管理. 3 shiro授权3.1 授权流程3.2 三种授权方法Shiro 支持三种方式的授权:编程式:通过写if/else 授权代码块完成:Subject subject = SecurityUtils.getSubject(); if(subject.hasRole(“ admin ” ) / 有权限 else / 无权限 注解式:通过在执行的Java方法上放置相应的注解完成:RequiresRoles(admin) public void hello() / 有权限 JSP/GSP 标签:在JSP/GSP 页面通过相应的标签完成: 7构ifiScturilyManager环垃Subject.isPermittcd()授权SeenrityManager.isPenniticd(执行授权Authrizcr执佇授杖Ralm根据身份疣取资深忟哏佔以IL3.3 shiro-permission.ini shiro-permission.ini 里边的内容相当于在数据库。#用户users#用户zhang 的密码是 123,此用户具有 role1 和role2 两个角色zhang =123,role1,role2wang=123,role2#权限roles#角色role1 对资源 user 拥有create、update 权限role1 =user:create,user:update#角色role2 对资源 user 拥有create、delete 权限role2 =user:create,user:delete#角色role3 对资源 user 拥有create权限role3 =user:create权限标识符号规则:资源:操作 :实例 (中间使用半角 :分隔 ) user:create:01 表示对用户资源的01 实例进行create 操作。user:create:表示对用户资源进行create 操作,相当于user:create:* ,对所有用户资源实例进行create 操作。user:* :01 表示对用户资源实例01 进行所有操作。3.4 程序编写/基于角G的揆权/hflsRol崎入ft色桐RboolaanihaRoleSystem*out*println4ishasRole);/hasAllRolJiCTa有多个始boolanhatAllRolys=tubject.ha*AllRolei(Aorayt.oiListVoly1M,Volt-iV,Vole3,);5yite?m_uut_print1n-t-hdsAllRoles)jsubject*hoftoleCVoll);/chec105法ifi竹ft权,扣樂3S1W+33尝榈出S京/subett.checkRolerolel3*);/甚子资强的揍权/isPermi什ed传入标iH苻booleani5PermitJtedSystem,out-printingk,-tRPHfJ|gjf,+isPenmil:i:ecl);subject:-d&Permilrtecl(*u5er:create:1M)jbooleanisPermit4:edA11=subjeirtTisPerm:t七tedAl1(user:(ireate:1,uspr:de1eteJSys-tem.OLft.prirrtin(-多入:s P e r m i+i:e d A1 1)j/使mcheck方法进冇校抆,扣闲窄杈不_讨亡啪出异常ubjtict,checkPflrmibion(itemstc:1);4 自定义 realm 进行授权4.1 需求上边的程序通过shiro-permission.ini 对权限信息进行静态配置,实际开发中从数据库中获取权限数据。就需要自定义 realm,由 realm 从数据库查询权限数据。realm 根据用户身份查询权限数据,将权限数据返回给authorizer (授权器)。4.2 自定义 realm 在原来自定义的realm 中,修改doGetAuthorizationInfo方法。4.3 shiro-realm.ini 在 shiro-realm.ini 中配置自定义的realm,将 realm 设置到 securityManager 中。mainOverrideprotectedAuthorizationInfodoGetAuthorizationlnfofPrincipalCollectionprincipals)/从principals获取主身份If息/柊getPrimaryPrincipal方法逅回直特为真实身份龙型t_tidoGetAuthenticationInfoiUljliiii?ijSimplstringusenCode=(String)principals.getMrimanyPnincipal()-/槙抑M數掮庠获取罗嫩掮Listpermissions-add(._user:create):用户的髓permissions.add11items:add;/商知症加权限HArrayList()jpermissions=rew/&.imm遐跑杈信息(要包活上娜permissions)SirtiplAuthiorizationinfosimpleAuthoriationlrifo=:newSimpleAuthorizationlnfof);/捋宜晒愤权信息填充到simpleAuthorizationInfos报中simpleAuthorizationInfo.dddStringPermis3ions(prmision5);simp1eAu七hori7ationTrrfo;ne+urn#自定义 realmcustomRealm =cn.itcast.shiro.realm.CustomRealm#将realm 设置到 securityManager,相当 于spring中注入securityManager.realms=$customRealm 4.4 测试程序/ 自定义 realm 进行资源授权测试Testpublicvoid testAuthorizationCustomRealm() / 创建SecurityManager工厂Factory factory = new IniSecurityManagerFactory( classpath:shiro-realm.ini); / 创建SecurityManagerSecurityManager securityManager = factory.getInstance(); / 将SecurityManager设置到系统运行环境,和 spring后将SecurityManager配置spring容器中,一般单例管理SecurityUtils.setSecurityManager(securityManager); / 创建subjectSubject subject = SecurityUtils.getSubject(); / 创建token 令牌UsernamePasswordToken token = new UsernamePasswordToken(zhangsan, 111111 ); / 执行认证try subject.login(token); catch (AuthenticationException e) / TODO Auto-generated catch blocke.printStackTrace(); System. out .println( 认证状态: + subject.isAuthenticated(); / 认证通过后执行授权/ 基于资源的授权,调用 isPermitted方法会调用 CustomRealm从数据库查询正确权限数据/ isPermitted传入权限标识符,判断 user:create:1是否在 CustomRealm查询到权限数据之内boolean isPermitted = subject.isPermitted(user:create:1); System. out .println( 单个权限判断 + isPermitted); boolean isPermittedAll = subject.isPermittedAll(user:create:1, user:create); System. out .println( 多个权限判断 + isPermittedAll); / 使用check 方法进行授权,如果授权不通过会抛出异常subject.checkPermission(items:add:1); 4.5 授权流程1、对 subject 进行授权,调用方法isPermitted(permission 串)2、SecurityManager 执行授权,通过ModularRealmAuthorizer执行授权3、ModularRealmAuthorizer执行 realm(自定义的CustomRealm)从数据库查询权限数据调用 realm 的授权方法:doGetAuthorizationInfo4、realm 从数据库查询权限数据,返回ModularRealmAuthorizer 5、ModularRealmAuthorizer调用 PermissionResolver 进行权限串比对6、如果比对后, isPermitted 中permission 串在 realm 查询到权限数据中,说明用户访问permission 串有权限, 否则 没有权限,抛出异常。5 shiro与项目整合5.1 需求将原来基于url 的工程改成使用shiro 实现。5.2 创建新工程创建 web 工程:permission_shiro1110 5.3 去除原工程的认证和授权的拦截删除 springmvc.xml 中: 5.4 jar 包包括:shiro-web 的 jar、shiro-spring 的 jar shiro-code 的 jar 5.5 web.xml中配置 shiro的 filter 在 web 系统中, shiro 也通过 filter 进行拦截。 filter 拦截后将操作权交给spring 中配置的filterChain (过虑链儿)shiro 提供很多filter 。在 web.xml 中配置 filter BsMrc-rprirgCfISshirs-wet)sMrc-vrebaluirf5itijshiroFilterorg*springframework*web.filter*DelegatingFilterProxytangetFilterLifecycletruetargetBeanNameshiroFiltershiroFilter/*5.6 applicationContext-shiro.xml 在 applicationContext-shiro.xml 中配置 web.xml 中 fitler 对应 spring 容器中的bean。5.7 静态资源对静态资源设置逆名访问:修改 applicationContext-shiro.xml: c!-*w&b.xmli?Jhirop:!“Jyy7cWebn;iJS3-*propertyname=【,secii/it3f/ttpwtfeiref-wsecwrityNanugsr,r/TiDginUrliAiaJt-嘛S有认沾讳会请字tt地址jfiOU证.iffiTttim0forn(iAufh*mtipropertyname=Hiooint/rivlue-m/iogin.actionm/攰脑峨乂.M上向节1庠拉行.pnopertyM/itterChainDsfinii:iansuname-=aron弋/propertyrityManager全亩IS-kbeanid=11secwrityNanagsrmcla55=iHor3ppcache,shrirorucb-Migt.OcfaultiifebSccjrityManageruC!5ecuU-realm-kbeanid=rustoafleaimclass=Vn,itcast.ssti.shiro.Custowtkeol/value/images/*/js/styles/*=anon牛中anonanon5.8 登陆5.8.1 原理使用FormAuthenticationFilter过虑器实现,原理如下:将用户没有认证时,请求loginurl进行认证,用户身份和用户密码提交数据到loginurl FormAuthenticationFilter拦截住取出 request中的 username 和 password(两个参数名称是可以配置的)FormAuthenticationFilter调用 realm 传入一个 token (username 和 password)realm 认证时根据username 查询用户信息(在 Activeuser中存储,包括 userid、 usercode 、 username、 menus) 。如果查询不到, realm 返回 null ,FormAuthenticationFilter向 request 域中填充一个参数(记录了异常信息)5.8.2 登陆页面由于FormAuthenticationFilter的用户身份和密码的input的默认值( username 和 password),修改页面的账号和密码的 input的名称为 username 和 password 5.8.3 登陆代码实现/7餐陆拐交地址_和叩卩11(:300Sb&anid=shiriiter*cla55=l,cjrg,ipac/je,shir1-loginUrlU还 根 交 埔 址,将 会m求 此WAl进f!iUE_STJtfelsforRAjthnticdtionFilteriSMAiif-通远unauthorizedUr丄相较有权限揲作哦转芡B-propertyramG-rvnaothorizedUrluvalue=Vre/sc,jspfpropertyndrne=,p/iLterC/ioif7JeiLnitiorrsT7aTijey/logout*actian=logoutf*用户Reque5tMapping/logout*publicStringlogout(HttpSessionsession)throwsExceptitn/sessionse5sion.invalidate()j/S定向到商品查阃页面returnnedinect:/first.action1-V5.10认证信息在页面显示1、认证后用户菜单在首页显示2、认证后用户的信息在页头显示5.10.1修改 realm 设置完整认证信息realm 从数据库查询用户信息,将用户菜单、 usercode、 username 等设置在SimpleAuthenticationInfo中。先使用静态代码实现:5.10.2修改 first.action将认证信息在页面显示/activeUser或是用户身信息ActiveUseractiveUser=newActivellser()activeUser,setUseridhangsan*)-activeUser.setUsercodeCzhangsan);activeUser.setUsenname*;);/根梯用户id取出宽单通iiSevie取出菜单Listtry=null;menus=sysService-findMenuListByUsenldf*zhang5an1*);|catch(Exceptione)rnenu/TODOAuto-generatedcatchblocke.pnintStackTrace();/将用户荦单设S到activeUsertiveUser.setMenus(menus)*L/activeUserTSsirtipleAuthenticationlnfoSimpleAutlienticationlnfasiinpleAuthenticationlnfoactiveUserpasswordthis,getName);SimpleAuthenticationlnfof=new5.11授权过虑器测试5.11.1使用 PermissionsAuthorizationFilter 在 applicationContext-shiro.xml中配置 url 所对应的权限。测试流程:1、在 applicationContext-shiro.xml中配置 filter 规则/items/queryItems.action = permsitem:query2、用户在认证通过后,请求/items/queryItems.action 3、被PermissionsAuthorizationFilter 拦截,发现需要“item:query”权限4、PermissionsAuthorizationFilter 调用 realm 中的 doGetAuthorizationInfo获取数据库中正确的权限5、 PermissionsAuthorizationFilter对item:query 和从 realm 中获取权限进行对比, 如果 “item:query”在realm 返回的权限列表中,授权通过。5.11.2创建 refuse.jsp 如果授权失败,跳转到refuse.jsp,需要在spring 容器中配置:ftContnollenpublicclassFirs-tAction系娜页RequestMapping(, ,/fitStH)publicStringfirst(Modelmodel)throwsException/fJlshiro)5essiori中聃activeUserSubjectsubject=SecunityLltils.getSubj&cti);細綱ActiveLlseractiveUser=(ActiveUser)subject.getPrincipal()jI/通传到页model.addAttribjte(MactiveUser,activeUser);|return11/first;5.11.3问题总结1、在 applicationContext-shiro.xml中配置过虑器链接,需要将全部的url 和权限对应起来进行配置,比较发麻不方便使用。2、每次授权都需要调用realm 查询数据库,对于系统性能有很大影响,可以通过shiro 缓存来解决。5.12shiro 的过虑器过滤器简称对应的 java 类anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter perms org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter port org.apache.shiro.web.filter.authz.PortFilter rest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter roles org.apache.shiro.web.filter.authz.RolesAuthorizationFilter ssl org.apache.shiro.web.filter.authz.SslFilter user org.apache.shiro.web.filter.authc.UserFilter logout org.apache.shiro.web.filter.authc.LogoutFilter anon:例子 /admins/*=anon 没有参数,表示可以匿名使用。authc: 例如 /admins/user/*=authc表示需要认证 (登录 )才能使用, FormAuthenticationFilter是表单认证,没有参数perms: 例子 /admins/user/*=permsuser:add:*,参数可以写多个, 多个时必须加上引号,并且参数之间用逗号分割,例如 /admins/user/*=permsuser:add:*,user:modify:*,当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll() 方法。user:例如 /admins/user/*=user没有参数表示必须存在用户, 身份认证通过或通过记住我认证通过的可以访问,当登入操作时不做检查N!web.xml_Jj:iifirterMbean!-loginUrl认证携交地dh如有认将会商求it地址进行认证*iS求此地址将由formAutheryticatioriFilt!-action,建 坟 不0适,证 成 功 自 游ij上一个清求路轻-name=“lunauthorizedUrlMMSEB-:unauthorizedUri*value=Vnpropertyname:5.13认证5.13.1需求修改 realm 的 doGetAuthenticationInfo ,从数据库查询用户信息,realm 返回的用户信息中包括(md5 加密后的串和 salt) ,实现让shiro 进行散列串的校验。5.13.2修改 doGetAuthenticationInfo从数据库查询用户信息1、将 SysService注入到 realm 中。/realm的认证方法,从数据库查询用户信息Overrideprotected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken token) throws AuthenticationException / token是用户输入的用户名和密码/ 第一步从 token 中取出用户名String userCode = (String) token.getPrincipal(); / 第二步:根据用户输入的 userCode 从数据库查询SysUser sysUser = null ; try sysUser = sysService.findSysUserByUserCode(userCode); catch (Exception e1) / TODO Auto-generated catch blocke1.printStackTrace(); / 如果查询不到返回 nullif (sysUser= null) /returnnull; / 从数据库查询到密码String password = sysUser.getPassword(); / 盐String salt = sysUser.getSalt(); psjrMonvg9rAJ0yi;/|ui-eay3uT2tJOnnyspuaqjcaujGayuiosnsscDDrqnd/ 如果查询到返回认证信息 AuthenticationInfo/activeUser就是用户身份信息ActiveUser activeUser = new ActiveUser(); activeUser.setUserid(sysUser.getId(); activeUser.setUsercode(sysUser.getUsercode(); activeUser.setUsername(sysUser.getUsername(); /./ 根据用户 id 取出菜单List menus = null ; try / 通过service取出菜单menus = sysService.findMenuListByUserId(sysUser.getId(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); / 将用户菜单设置到 activeUseractiveUser.setMenus(menus); / 将activeUser设置simpleAuthenticationInfoSimpleAuthenticationInfo simpleAuthenticationInfo = newSimpleAuthenticationInfo( activeUser, password,ByteSource.Util.bytes (salt), this.getName(); return simpleAuthenticationInfo; 5.13.3设置凭证匹配器数据库中存储到的md5 的散列值,在realm 中需要设置数据库中的散列值它使用散列算法及散列次数,让shiro进行散列对比时和原始数据库中的散列值使用的算法一致。5.14授权5.14.1需求修改 realm 的 doGetAuthorizationInfo ,从数据库查询权限信息。使用注解式授权方法。使用 jsp 标签授权方法。5.14.2修改 doGetAuthorizationInfo从数据库查询权限/ 用于授权Overrideprotected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection principals) / 从 principals获取主身份信息/ 将getPrimaryPrincipal方法返回值转为真实身份类型(在上边的doGetAuthenticationInfo认证通过填充到 SimpleAuthenticationInfo中身份类型),ActiveUser activeUser = (ActiveUser) principals.getPrimaryPrincipal(); / 根据身份信息获取权限信息/ 从数据库获取到权限数据List permissionList = null ; try permissionList = sysService.findPermissionListByUserId(activeUser.getUserid(); realmpropertyname=r,crd&ntiaisMotchrrtref=ttcrd&ntxoi5Motchrt,fhashAigorithmNameuvalue=,fffld5,name= catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); / 单独定一个集合对象List permissions = new ArrayList(); if (permissionList!=null ) for (SysPermission sysPermission:permissionList) / 将数据库中的权限标签符放入集合permissions.add(sysPermission.getPercode(); / 查到权限数据,返回授权信息( 要包括 上边的 permissions)SimpleAuthorizationInfo simpleAuthorizationInfo = newSimpleAuthorizationInfo(); / 将上边查询到授权信息填充到simpleAuthorizationInfo对象中simpleAuthorizationInfo.addStringPermissions(permissions); return simpleAuthorizationInfo; 5.14.3开启 controller 类 aop 支持对系统中类的方法给用户授权,建议在controller 层进行方法授权。在 springmvc.xml 中配置:5.14.4在 controller 方法中添加注解aop;configproxy-target-1355=trueMX/aop:config:beanclassorg.opache.shiro.spring.security,interceptor.AuthorizotionAttribute5ourceAdfisortfsecurityManager*ref=11securityManpger/propertyname=5.14.5jsp标签 授权Jsp页面添加: 标签名称标签条件(均是显示标签内容) 登录之后 不在登录状态时 用户在没有RememberMe 时 用户在 RememberMe 时 在有 abc 或者 123 角色时 拥有角色 abc 没有角色 abc 拥有权限资源abc 没有 abc 权限资源 显示用户身份名称 显示用户身份中的属性值修改 itemsList.jsp 页面:/商iSittfe方法gRgquestMapping(Vqueryltems)iuiresPermissionspublicModelAndViewqueryItemsHttpServletRequestrequest)throwsException/方法返m丰宇符串就是逻it图名,Model作用是SMS堉s到requests面展示Requ&stNappingalueVeditltemsmethodRequestMethod-GC7)Require5Permis5ions(item:updateJvVtk行itK法需要item;updateMMpublicStringeditltems(ModelmodeljInteger1id)throwsException/itertsQue麵!的/ftVaLidated中定义侯月ValidGroup域R通的迳(SReque5Mappin/editltemSubmit)publicStringeditltem5ubmit(Integerid,ItemsCustOfnitemsCustom,I-trpotsQugr*yVoimsQueryVo)thTOtosEJcepiriQn-RequdresPermis&ionCitem:update)汍行itl方:去Ijdate.t颁publicStringeditItemSubmit(ModelmodelIntegerid,idatpd(value=ValidGroupl.class)ModplAttributvalue=itpra5CListon)TtemsCu8indingRsultbindingRefultIshref=M$pgeContext_request.contextPathy/items/editltats.oction?d-iitem,idwws5.14.6授权测试当调用 controller 的一个方法, 由于该方法加了 RequiresPermissions(item:query) ,shiro 调用 realm 获取数据库中的权限信息,看item:query 是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。当展示一个jsp 页面时, 页面中如果遇到 ,shiro 调用 realm 获取数据库中的权限信息,看item:update 是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。问题:只要遇到注解或jsp 标签的授权,都会调用realm 方法查询数据库,需要使用缓存解决此问题。5.15shiro 缓存针对上边授权频繁查询数据库,需要使用shiro 缓存。5.15.1缓存流程shiro 中提供了对认证信息和授权信息的缓存。shiro 默认是关闭认证信息缓存的,对于授权信息的缓存shiro 默认开启的。主要研究授权信息缓存,因为授权的数据量大。用户认证通过。该 用户第一次授权:调用realm 查询数据库该 用户第二次授权:不调用realm 查询数据库,直接从缓存中取出授权信息(权限标识符)。5.15.2使用 ehcache 5.15

    注意事项

    本文(shiro课堂笔记.pdf)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开