java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.:模組化本地測試shiro的一些總結

來源:互聯網
上載者:User

標籤:tom   成功   單元測試   imp   那是   關係   .sh   ini檔案   default   

項目由於是多模組的,所以,測試的時候我想現將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的一些總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.