1. 程式人生 > >shiro與app利用token進行互動的解決方案

shiro與app利用token進行互動的解決方案

shiro在收到請求時會預設讀取cookie裡的資料來判別客戶端的身份,然而我的專案沒有用cookie,伺服器也不處理cookie資訊,我們看看shiro讀取cookie的程式碼:

//SimpleCookie類的readValue方法
public String readValue(HttpServletRequest request, HttpServletResponse ignored) {
        String name = getName();
        String value = null;
        javax.servlet.http.Cookie cookie = getCookie(request, name);
        if
(cookie != null) { // Validate that the cookie is used at the correct place. String path = StringUtils.clean(getPath()); if (path != null && !pathMatches(path, request.getRequestURI())) { log.warn("Found '{}' cookie at path '{}', but should be only used for '{}'"
, new Object[] { name, request.getRequestURI(), path}); } else { value = cookie.getValue(); log.debug("Found '{}' cookie value [{}]", name, value); } } else { log.trace("No '{}' cookie value", name); } return
value; }

知道了問題的根源就好辦了,我給SimpleCookie建個子類,並重寫readValue方法:

@Override
    public String readValue(HttpServletRequest request, HttpServletResponse ignored) {
        String token = request.getParameter("tokenContent");
        return token;
        // return super.readValue(request, ignored);
    }

然後對SimpleCookie的子類做下配置:


    <!-- sessionManager -->
    <bean id="sessionManager"
        class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
        <property name="sessionDAO" ref="redisSessionDAO" />
        <property name="globalSessionTimeout" value="604800000" />
        <!-- 會話Cookie -->
        <property name="sessionIdCookie" ref="sessionIdCookie" />
    </bean>

    <!-- 自定義會話Cookie -->
    <bean id="sessionIdCookie" class="com.cookie.MySimpleCookie">

        <property name="httpOnly" value="true" />
        <!--cookie的有效時間 -->
        <property name="maxAge" value="604800" />       
    </bean>

使了一個偷樑換柱的手段,問題解決!不過當提交的表單是型別是multipart/form-data時會獲取不了token,解決方法下次再寫。

相關推薦

shiroapp利用token進行互動解決方案

shiro在收到請求時會預設讀取cookie裡的資料來判別客戶端的身份,然而我的專案沒有用cookie,伺服器也不處理cookie資訊,我們看看shiro讀取cookie的程式碼: //SimpleCookie類的readValue方法 public Stri

APP利用token機制進行身份認證(理解token機制+簡單Java程式碼實現)

什麼是token token的意思是令牌,想象一下用過的qq令牌,是來自(騰訊)服務端生成的一串字元,作為客戶端(我們自己)進行請求的一個標識。比如說:改qq密碼。而這裡我們是自己開發App,我們的使用者用token請求登入,我們對他進行身份認證。 當用戶第一

javaweb和app的前後臺互動Content-Type理解得出的解決方案

  最近在做一個微信小程式,發現後臺獲取前臺傳送的資料,不能通過傳統的springmvc 直接對映獲取,通過參考案列小程式,發現獲取小程式引數是這樣的,程式碼如下。 StringBuilder sb = new StringBuilder();

androidPC,C#Java 利用protobuf 進行無障礙通訊【Socket】

轉自https://www.cnblogs.com/TerryBlog/archive/2011/04/23/2025654.html protobuf 是什麼?   Protocol buffers是一種編碼方法構造的一種有效而可擴充套件的格式的資料。 谷歌使用其內

Smart LinkAvaya簽署合作備忘錄 —— 利用聯絡中心雲解決方案加速擴充套件數字化服務

阿聯酋迪拜--(美國商業資訊)--教育培訓機構Al Khaleej旗下子公司、沙烏地阿拉伯領先的業務流程外包(BPO)公司宣佈Avaya 控股 (NYSE:AVYA)攜手合作,加速Smart Link的業務擴張及其數字服務組合的多元化發展。 兩家公司在GITEX科技周(GI

如何在私有區塊鏈上編寫、部署以及以太坊進行互動的智慧合約

摘要:本文作者以極長的篇幅給出了在私有區塊鏈上編寫、部署以及與以太坊進行互動的智慧合約的較為完整的程式碼、相關細節步驟、使用者介面等。作者是希望藉助他這篇文章,大家可以自行在私有以太坊區塊鏈上編寫並部署一個智慧合約,以下是譯文。 這裡的規則是:如果通讀本文

使用Struts2和jQuery EasyUI實現簡單CRUD系統(八)——StrutsEasyUI使用JSON進行互動

由於前面寫了的四篇文章壓縮得太厲害,還有真正的原理也沒有弄通,所以重新寫了使用Struts2和jQuery EasyUI實現簡單CRUD系統(一)、(二)和(三)。知道ajax與struts間用json

Win 7 下跨越Session Id 0的Windows Service 並活動Session UI進行互動

常規的WinForm程式截圖比較簡單,只需利用Graphics的CopyFromScreen函式即可擷取當前螢幕影象,如下4行程式碼即可完成截圖並儲存檔案的功能: Bitmap snapShot= new Bitmap(Screen.PrimaryScreen.Bound

redis系列之數據庫緩存數據一致性解決方案

查詢緩存 src dev 信息 一次 ram ren red getc redis系列之數據庫與緩存數據一致性解決方案 數據庫與緩存讀寫模式策略 寫完數據庫後是否需要馬上更新緩存還是直接刪除緩存? (1)、如果寫數據庫的值與更新到緩存值是一樣的,不需要經過任何的計算,可以馬

(通用)Android App代碼混淆終極解決方案【轉】

rar $$ enable 知識 object ava write android ref App雖然沒有那麽的高大上,但是代碼的混淆是代表了程序員對App的責任心, 也是對App安全的一點點保證。今天我會將自己做Android混淆的過程和體會分享給大家,也避免大家少走彎路

dubbo 註解spring 事務註解衝突完美解決方案

這幾天碰到dubbo 註解與spring 事務註解同時啟用dubbo註解無法生效的問題. 在網上找了大部分程式設計師們貼出的解決方案都沒有解決問題。最終在自己的分析下成功解決問題。 解決步驟如下,後面會貼出詳細分析原因。我用的Dubbo版本為2.5.3;spring MVC版本為3.2.13

CORS 跨域 TP5中跨域的解決方案

在做專案過程中,使用Vue-element-admin作為前端,ThinkPHP5作為後端框架進行開發,會遭遇跨域問題,本文給出ThinkPHP5解決跨域 1.CORS的概念     CORS(Cross-Origin Resource Sharing 跨源資源共享),當

app配置智慧硬體的解決方案

app配置智慧硬體的解決方案           隨著越來越多的智慧硬體產品上市,越來越多的硬體都戴上了智慧的帽子,什麼智慧插座,智慧音箱,智慧稱等等。凡是所謂的智慧,都是通過wifi或者藍芽來連線網際網路,其中藍芽也只能算是手機的附屬品吧。

【小家思想】通俗易懂版講解JWT和OAuth2,以及他倆的區別和聯絡(Token鑑權解決方案

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

VMware Workstation Device/Credential Guard 不相容 解決方案

win10專業版官方解決方案 https://kb.vmware.com/s/article/2146361 win10家庭版解決方案 win10家庭版本身是不支援Hyper-V服務的,但是如果是“win10預覽體驗家庭版”,會在“服務”中發現有Hyper-V服務。解決方案:

Unity Android APP il2cpp熱更完美解決方案

1. 簡介 這是Unity Android APP il2cpp熱更完美解決方案的Demo(Git地址)的說明。 和現有的熱更解決方案不同的是,他不會引入多餘的語言(只是UnityScript,c#…),對Unity程式設計和編碼沒有任何限制。你可以在預置和場景裡的GameObjec

抱怨從何處來,又將向何處去 —— 談專案中管理者執行者的矛盾以及建議解決方案

工作中,我們最常用的方式是以專案為單位執行任務。在專案中,我們又各有分工,有的人擔當專案管理者,有的人擔當專案開發人員,有的人擔當專案的整合、釋出人員等等。雖然我們看到的是分工明確,然而,在專案的執行過程中卻困難重重。客戶的變更,日程的壓力,無疑是我們最頭痛而且很難改變的。同

爬蟲爬取csdn登陸頁面持續載入,selenium模擬無法進行解決方案

1.近日在爬取csdn時發現csdn突然需要登陸了,登陸沒關係,用selenium模擬填寫個登陸表單也就行了,但實際操作中發現,模擬進行到登陸頁面時頁面持續載入,後續步驟無法進行,自然無法登陸和爬取,如下圖: 只要在一定時間後終止瀏覽器繼續載入就行,嘗試了下面

平板以及小運存手機APP使用RecyclerView卡頓解決方案

前言 最近一直在做平板類應用的開發,關於自動售貨機的系統,我也是第一次接觸硬體以及Android盒子的開發,從剛開始的陌生到現在的熟悉,感覺還是收穫挺多的,最近專案快要上線了,介面真的很簡單,展示商品用的只是RecyclerView,也沒有巢狀,但是就是滑動卡頓

IOS開發~UISCrollViewUITableView巢狀使用終極解決方案

問題由來:專案需要做類似網易新聞的那種UIScrollView上放多個UITableView的效果,其中UITableView還要有下拉重新整理效果。 一開始的思路,也是最直觀的思路就是一個UIScrollView上放多個UITableView,然後發現UITab