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,如果没有认证成功,值直接抛出异常,我们根据异常来判断是异常类别,一般都设置为用户名或者密码错误

比较详细的认证流程

时间: 2024-10-13 12:49:25

java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.:模块化本地测试shiro的一些总结的相关文章

Hive报错 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D

报错信息如下 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D 解决方法: 编辑 hive-site.xml 文件,添加下边的属性 <property> <name>system:java.io.tmpdir<

java.lang.IllegalArgumentException: Illegal character in query at index 261

在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentException: Illegal character in query at index 261解析不成功,改成OkHttp解析即可. 网上有些方法,说先URLEncode再拼接,如果解决不了,换个联网请求方式,试一下.

解决Android studio 启动报错java.lang.RuntimeException: java.lang.IllegalArgumentException

报错内容 Internal error. Please report to https://code.google.com/p/android/issues java.lang.RuntimeException: java.lang.IllegalArgumentException: Argument for @NotNull parameter 'name' of com/android/tools/idea/welcome/Platform.<init> must not be null 

java.lang.IllegalArgumentException: Service not registered

java.lang.IllegalArgumentException: Service not registered 首先检查一下,Service是否在AndroidManifest文件中注册.格式如下: <service   android:name=".MyService"  ></service> 如果Service已经注册了,还是会报这个错误的话,可能是 1.bindService没有成功,就直接unbindService: 2.也可能是已经unbind

java.lang.IllegalArgumentException: XXX is ambiguous in Mapped Statements collection

问题的出现: 在后台添加一个新栏目的时候,照着程序已有原来的代码添加新的功能时,文件没有错误.点击新的栏目的时候报了java.lang.IllegalArgumentException: selectPageByExample is ambiguous in Mapped Statements collection (try using the full name including the namespace, or rename one of the entries). 解决: 在网上查找了

java.lang.IllegalArgumentException: Document base E:\Eclipse\workspace\.metadata\.plugins\org.eclips

1.错误描述 四月 13, 2015 5:56:55 下午 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Java\jdk1.7.0_67\bi

spring整合mybatis遇到的bug java.lang.IllegalArgumentException: Property &#39;sqlSessionFactory&#39; or &#39;sqlSessionTemplate&#39; are required

出bug的原因:mybatis-spring版本问题. 查看SqlSessionDaoSupport源码 1.2以上的版本: 1.1.1版本: 解决方法:1.2版本移除了@Autowired的注解,所以如果是1.2版本以上,要在BaseDaoImpl里面手动 注入SetSessionTemplate或者SetSessionFactory spring整合mybatis遇到的bug java.lang.IllegalArgumentException: Property 'sqlSessionFa

BottomSheetBehavior 之 java.lang.IllegalArgumentException: The view is not associated with BottomSheetBehavior

09-14 22:52:58.891 13674-13674/me.chunsheng.uberdriver E/AndroidRuntime: FATAL EXCEPTION: main Process: me.chunsheng.uberdriver, PID: 13674 java.lang.RuntimeException: Unable to start activity ComponentInfo{me.chunsheng.uberdriver/me.chunsheng.uberdr

关于SimpleCursorAdapter在sqlite数据库中取数据报错 : java.lang.IllegalArgumentException: column &#39;_id&#39; does not exist

_id列不存在 需要创建一个 id列 因为SQLlite数据库 的onCreate方法是在数据库不存在的时候才调用所以我们需要清除一下这个app 的数据 将数据清空 关于SimpleCursorAdapter在sqlite数据库中取数据报错 : java.lang.IllegalArgumentException: column '_id' does not exist