zoukankan      html  css  js  c++  java
  • Shiro精通学习——【第一集:入门】

    入门:

    main方法直接执行:https://blog.csdn.net/a907691592/article/details/80559904

    使用配置文件方式:https://blog.csdn.net/qq_26525215/article/details/78059488

    源码理解:

    shiro的密码对比源码:https://blog.csdn.net/acmman/article/details/78446008

    shiro+spring+springmvc+mybatis整合:https://blog.csdn.net/u012031380/article/details/68921883

    shiro重要的概念:https://www.cnblogs.com/Java3y/p/8615275.html

    Shiro执行原理:

    1,

    使用FormAuthenticationFilter过虑器实现 ,原理如下:

    将用户没有认证时,请求loginurl进行认证,用户身份和用户密码提交数据到loginurl

    FormAuthenticationFilter拦截住取出request中的username和password(两个参数名称是可以配置的)

    FormAuthenticationFilter调用realm传入一个token(username和password)

    realm认证时根据username查询用户信息(在Activeuser中存储,包括 userid、usercode、username、menus)。

    如果查询不到,realm返回null,FormAuthenticationFilter向request域中填充一个参数(记录了异常信息)

    2,

    当调用controller的一个方法,由于该 方法加了@RequiresPermissions("item:query") shiro调用realm获取数据库中的权限信息,看"item:query"是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。

    当展示一个jsp页面时,页面中如果遇到<shiro:hasPermission name="item:update">shiro调用realm获取数据库中的权限信息,看item:update是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。

    问题:只要遇到注解或jsp标签的授权,都会调用realm方法查询数据库,需要使用缓存解决此问题。

    3,

    shiro中提供了对认证信息和授权信息的缓存。shiro默认是关闭认证信息缓存的,对于授权信息的缓存shiro默认开启的。主要研究授权信息缓存,因为授权的数据量大。

    用户认证通过。

    用户第一次授权:调用realm查询数据库

    用户第二次授权:不调用realm查询数据库,直接从缓存中取出授权信息(权限标识符)。

    如果用户正常退出,缓存自动清空。

    如果用户非正常退出,缓存自动清空。

    如果修改了用户的权限,而用户不退出系统,修改的权限无法立即生效。

    需要手动进行编程实现:

    在权限修改后调用realmclearCache方法清除缓存。

    下边的代码正常开发时要放在service中调用。

    service中,权限修改后调用realm的方法。

    realm中定义clearCached方法:

  • 相关阅读:
    Oracle--SQL Developer创建连接及使用
    MongoDB--使用修改器修改文档
    MongoDB 的创建、查询、更新、删除
    window下 Mongodb无法访问28107的有关问题(转)
    十一、存储过程
    十、视图
    九、增、改、查数据
    七、联结表
    八、组合查询和全文本搜索
    六、聚合函数、数据分组
  • 原文地址:https://www.cnblogs.com/lirenhe/p/10375991.html
Copyright © 2011-2022 走看看