项目由于是多模块的,所以,测试的时候我想现将shiro框架进行本地测试,然后再放入框架里面,但是这个困扰我了两天了都,其实我应该想到的,只是想多试试,最后还不如多想想

先说一下系统的基本情况,项目是多模块协同开发的,我负责的用户管理模块和权限认证模块,权限认证使用的是shiro框架,然后我就在网上学习了这个框架以及这个框架和ssm的整合,问题就出现在这里:学习的是和ssm框架进行整合,而这个整合用到了web的内容,而我只是本地化单元测试,所以我在写test cases的时候就出现了很多异常,让我百思不得其解,我先用shiro.ini文件读取本地文件获得的结果是正确的,然后我整合进spring容器的时候,相同的方法,总是抛出异常

java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.

然后开始网上找这类异常,梳理了一下,基本都是shirofilter顺序之类的,但是这个不符合我的要求啊,我要的是本地测试啊,并且,本地测试和这个sessionContext有毛关系啊?难不成是这个shiro的securityManager还需要web?前天这个念头在我头脑中一闪而过,然后我就否定了,因为是按照教程上来的啊。。。就是这个否定,让我白忙活了两天来解决这个问题。。。

今天,我梳理了一下认证流程,然后再找问题,然后就又想起先前的念头,真的是两个SecurityManager是不一样的么?好吧,那我就打个log看看,一看,确实不一样,读取ini文件生成SecurityManage Factory,然后生成SecurityManage,类型是:

 org.apache.shiro.mgt.DefaultSecurityManager

但是呢,我托管给spring容器的类型是

org.apache.shiro.web.mgt.DefaultWebSecurityManager

很明显,两个不是一个类型。那是不是这个引起的sessionContext呢?那就试一试,果然是这个影响的。。。。

呵呵,这样就给我提了一个醒,以后读取本地配置文件没问题的,注入spring容器有问题的,一定要注意这两个类型是不是一致。

首先先看看类的继承结构

下面是认证流程

1.先由用户名和密码生成一个UsernamePasswordToken

2,由Subject主体通过Login提交token,然后交给DelegatingSubject交给securityManager来执行login这个操作

3,securityManager有自己的realm,就是在配置文件制定的那个customerealm,所以,这个时候就有securityManager将这个操作交给customerealm来执行

4,一切都认证通过后,会生成一个subject,如果没有认证成功,值直接抛出异常,我们根据异常来判断是异常类别,一般都设置为用户名或者密码错误

比较详细的认证流程

最新文章

  1. SharePoint 2013 使用查阅项实现联动下拉框
  2. 使用LKDBHelper 插入相同id时候应该是更新数据而不是插入新的数据
  3. Restful API的设计与实践
  4. Unity3D脚本中文系列教程(十三)
  5. HDU 1863 畅通工程
  6. C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
  7. 用jquery-easyui中的combotree实现树形结构的选择
  8. 通过使用CyclicBarrier来计算Matrix中最大的值
  9. metasploit nessus & db_autopwn
  10. java代码如何读取properties文件
  11. MySQL中的一些内置函数
  12. 利用python实现简单随机验证码
  13. mysql-5.7.17-winx64 的安装配置
  14. sklearn机器学习-泰坦尼克号
  15. LOJ-10106(有向图欧拉回路的判断)
  16. beego api 服务允许跨域访问,解决前端访问报Access-Control-Allow-Origin问题
  17. SRM483
  18. aarch64_c1
  19. JS获取MVC Attrbuate验证是否通用
  20. 面试常见的selenium问题

热门文章

  1. [NM 状态机2] Container状态机详解
  2. Silverlight 安装失败 提示 消息 ID 1603 的解决方法
  3. java中接口与抽象类的区别
  4. 纯css3响应式3d翻转菜单
  5. Choose which tree,form view in many2one
  6. docker 中 安装 openssh-server
  7. SuperMap iClient如何使用WMS地图服务
  8. 使用QQ互联登录应用
  9. Vue基础及脚手架环境搭建
  10. Android Unique Device ID