shiro:基于shiro和springmvc 的用户认证理解

2024-11-14 03:22:05

1、对于一般介绍shiro和 spring 集成的文档,都会说先搭建环境、配置web.xml、shiro spring配置文件,收墩芬蓥然后开发realm,以及spring controller等等内容。而事实上一般也的确应该这样做,但是我有几个疑问:1.对于/a/login请求,为什么直接请求spring,而不通过shiro过滤器2.登录页面提交表单到/a/login时,又能被shirio过滤器捕获,完成登录认证3.而对spring controller来说,登录成功、登录失败有专门的处理方法,是怎么回事

shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解

2、按照以上问题和jeesite的集成方法,spring+shiro后登录认证的角色划分应该是这样的:spring:1.通过/a/login进入登录页的处理;2.登录认证失败后的处理逻辑;3.登录认证成功后的处理逻辑;shiro:1.登录认证逻辑2.登录失败、成功跳转逻辑

shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解

3、为一探究竟,查阅相关资料并通过测试,整理过程应该这样理解:spring mvc作为请求控制器,shiro作为权限过滤器,shiro对所有请求url进行判断,并指定相关的过滤器,例如/a/login指定的是authc过滤器,过滤器逻辑如果抛出异常表示认证失败,过滤器会转向shiroFilter配置的loginUrl地址,认证成功会转向配置的successUrl地址。而转向过后的逻辑将是由springmvc来控制。

4、同时又看到这样一句话,loginUrl有两个条件,条件一:登录失败shiro会跳转到这个url,条件二:登录提交漉胜衲仰表单url也必须是这个地址。第一个条件容易理解表示登录url,但是第二个条件该怎么理解?是为了让shiro能够正确拦截?可是拦截是在filterChainDefinitons中定义的啊。于是将form提交url修改与loginUrl不一致,结果并没有执行shiro登录认证程序。因此还是要确保form提交rl改与loginUrl一致的

shiro:基于shiro和springmvc 的用户认证理解

5、为了为清楚的理解这个过程,我将/a/login作为登录页面请求,而且shiro规则也是anon,将/a/loginaction作为登录失败处理逻辑,也作为shiro的loginUrl,当然也是form action url,将/a作为登录成功处理逻辑,也作为刷新首页处理逻辑。个人认为这样一来,/a/login和/a/loginaction区分一下更易理解。

shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解

6、中间还有个小插曲,由于shiro 配置的 filter 一直是/a/login.do,因此一直不执行登录认证逻辑,改了以后解决问题。

shiro:基于shiro和springmvc 的用户认证理解shiro:基于shiro和springmvc 的用户认证理解
猜你喜欢