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方法:

原文地址:https://www.cnblogs.com/lirenhe/p/10375991.html