java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.:模块化本地测试shiro的一些总结
项目由于是多模块的,所以,测试的时候我想现将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,如果没有认证成功,值直接抛出异常,我们根据异常来判断是异常类别,一般都设置为用户名或者密码错误
java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.:模块化本地测试shiro的一些总结的更多相关文章
- hadoop程序问题:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///
Java代码如下: FileSystem fs = FileSystem.get(conf); in = fs.open(new Path("hdfs://192.168.130.54:19 ...
- 严重: Error starting static Resources java.lang.IllegalArgumentException:
严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\myworkspace ...
- Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence
在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...
- tomcat报错java.lang.IllegalArgumentException: Document base XXXXX does not exist or is not a readable directory
启动tomcat的时候报如下错误: java.lang.IllegalArgumentException: Document base F:\java\tools\tomcat\me-webapps\ ...
- java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 严重: Exceptio ...
- java.lang.IllegalArgumentException: Illegal character in query at index 261
在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...
- 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因
问题:java.lang.IllegalArgumentException: Page directive: invalid value for import 环境:tomcat 7.0.65 出错原 ...
- 解决FTP的URL访问不能有中文名称的问题,报java.lang.IllegalArgumentException
最近一个项目要用到FTP做上传下载,我访问ftp的url中有中文名称,结果每次都报如下错: 1 Exception in thread "main" java.lang.Illeg ...
- JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
前些天,在进行分布式参数化测试的时候,出现了如题所示的错误报错信息.此文,针对此做一个简略的重现及分析说明. JMX脚本线程组参数配置如下所示: 参数文件路径配置如下所示: 执行JMX脚本后,服务器对 ...
随机推荐
- C#/Sqlite-SQLite PetaPoco django 打造桌面程序
为什么是 SQLite? 在以前的程序中, 我通常会使用 MySQL. 如果使用你程序的用户是一个软件小白, 而且远在另一个城市, 那么让她安装和部署 MySQL 将是一场噩梦: 她需要配置服务, 面 ...
- 转:ios的图片文件上传代码
转自: https://gist.github.com/igaiga/1354221 @interface ImageUploader : NSObject { NSData *theImage; } ...
- Ubuntu切换root用户权限
其实方法很简单,就是需要选对自己使用的linux系统,不同分支的系统切换root的方法不一定一样. Ubuntu切换root的方法很简单,首先一档钱管理员命令执行: sudo passwd root ...
- 批处理文件——多个QQ一键登录
偶然看到有的同学登录PC的QQ,发现他有很多QQ,每登录一个要切换一个,虽然记住了密码,但还是不方便,于是想通过批处理来实现“一键登录”的功能.以下内容为本文假想,如有雷同,实属巧合! 具体的实现步骤 ...
- SonarQube install on Kubernetes
Sonarqube搭建代码 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: postgres labels: app: ...
- Springboot配置文件加载顺序
使用Springboot开发的时候遇到了配置的问题,外部config里的配置文件本来没有配置https怎么启动还是https呢,原来开发中测试https在classpath路径的配置文件添加https ...
- 下载论坛源码GBK UTF8 BIG5分别是什么意思
下载论坛源码GBK UTF8 BIG5分别是什么意思? 提问者:ly1987520 | 浏览次数:4010次 下载论坛源码简体中文GBK 简体中文UTF8 繁体中文BIG5 分别是什么意思?他们的区别 ...
- 10-spring学习-注入Resource
注入Resource 虽然Resource 的子类利用了字符串格式进行了隐藏,但是此时的代码中,ResourceLoader跟我的开发没有任何关系, 如果真的开发只关心Resource一个接口就够了. ...
- 抛弃【 LIMIT O,N 】,换种方法查询分页
在分页功能开发时,我们很习惯用LIMIT O,N的方法来取数据.这种方法在遇到超大分页偏移量时是会把MySQL搞死的ooo... 通常,我们会采用ORDER BY LIMIT start, offse ...
- zabbix报错listener failed: zbx_tcp_listen() fatal error: unable to serve on any address
I'm trying to install zabbix on a new (virtual) server. But i have troubles with the zabbix_agentd o ...