项目由于是多模块的,所以,测试的时候我想现将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的一些总结的更多相关文章

  1. 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 ...

  2. 严重: Error starting static Resources java.lang.IllegalArgumentException:

    严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\myworkspace ...

  3. 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. ...

  4. 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\ ...

  5. java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

    java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 严重: Exceptio ...

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

    在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...

  7. 在访问jsp时抛java.lang.IllegalArgumentException: Page directive: invalid value for import的原因

    问题:java.lang.IllegalArgumentException: Page directive: invalid value for import 环境:tomcat 7.0.65 出错原 ...

  8. 解决FTP的URL访问不能有中文名称的问题,报java.lang.IllegalArgumentException

    最近一个项目要用到FTP做上传下载,我访问ftp的url中有中文名称,结果每次都报如下错: 1 Exception in thread "main" java.lang.Illeg ...

  9. JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法

    前些天,在进行分布式参数化测试的时候,出现了如题所示的错误报错信息.此文,针对此做一个简略的重现及分析说明. JMX脚本线程组参数配置如下所示: 参数文件路径配置如下所示: 执行JMX脚本后,服务器对 ...

随机推荐

  1. Android - Animation(二)

    Android - Animation(一) 一文总结了Android中的补间动画(View Animation/Tween Animation)和帧动画(Drawable Animation/Fra ...

  2. java线程总结(4/5)

    转自:http://blog.csdn.net/qiaqia609/article/details/8067356 整理的一些关于线程的面试题目: 46.java中有几种方法可以实现一个线程?用什么关 ...

  3. java线程总结(1/5)

    前言 闲来无事正值面试,看面试中有线程之问题,特此总结一番. 正文 一.线程和进程的区别:1.每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.2.线程可以看成时轻量级的进程 ...

  4. Maven中setting.xml配置Demo

    <!-- 指定本地默认仓库 --> <localRepository>G:\Java\apache-maven-3.5.2\repository</localReposi ...

  5. AWS RDS mysql无法连接的问题

    rds创建后,无法连接mysql 检查安全组规则是否配置了 1. 2. 这样你的EC2就可以访问了.如果还不行,检查数据库是否和EC2在同一 VPC内. 官方文档:https://docs.amazo ...

  6. qq邮箱、qq空间点击后以word方式打开解决办法

    解决办法: Internet--工具--Internet选项--程序--设为默认值

  7. 【MVC+MySQL+EntityFramework】查询性能优化笔记

    通过在DbContext中定了表之间的关系,查询后在View中通过item.ProjectOverHour来显示关联表数据. modelBuilder.Entity<ProjectOverHou ...

  8. struts2+jquery验证注冊用户是否存在

    注冊界面 register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...

  9. 蓝的成长记——追逐DBA(6): 做事与做人:小技术,大为人

    ***********************************************声明*************************************************** ...

  10. 用rz,sz命令在windows和linux之间传输文件(转)

    转自http://www.linuxmine.com/178.html有很多人没有听说过ZModem协议,更不知道有rz/sz这样方便的工具: 下面一段是从SecureCRT的帮助中copy的: ZM ...