1. 程式人生 > >shiro不能跳轉到登入前請求頁面

shiro不能跳轉到登入前請求頁面

現象:某商品展示頁面不需要使用者登入也可瀏覽,但是想購買商品時,需要使用者先登入,這時點選button提交表單時被shiro攔截,轉向登入頁面。登入成功夠跳轉到網站根目錄了,應該是跳轉到登入前請求頁面,即清單結算頁面。

問題:由於提交的表單是以POST方式提交的,所以shiro不會取得上次請求路徑。
org.apache.shiro.web.util.WebUtils.redirectToSavedRequest(),這個方法內:
if (savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)) {
successUrl = savedRequest.getRequestUrl();
contextRelative = false;
}

if (successUrl == null) {
successUrl = fallbackUrl;
}

可以看到需要提交的請求以GET方式才可以取得上次的路徑。

解決:form的提交方式改為method=”GET”即可。
或者自己定義CustomFormAuthenticationFilter繼承FormAuthenticationFilter。
重寫onAccessDenied方法。
思路是:
當請求的路徑不是shiro的login路徑時,先從request中取得提交的資料並做一個標記值,一同存入session。
當請求的路徑是shiro的login路徑時,從session取得標記值並判斷,判斷為真設定shiro的successurl
WebUtils.getAndClearSavedRequest(request);
WebUtils.redirectToSavedRequest(request, response, “需要轉向的路徑”);

同時,被跳轉的路徑控制器內從session取得之前儲存的值。

相關推薦

shiro不能登入請求頁面

現象:某商品展示頁面不需要使用者登入也可瀏覽,但是想購買商品時,需要使用者先登入,這時點選button提交表單時被shiro攔截,轉向登入頁面。登入成功夠跳轉到網站根目錄了,應該是跳轉到登入前請求頁面,即清單結算頁面。 問題:由於提交的表單是以POST方式提交

我的shiro之旅: 十五 shiro 登入成功後,登入頁面

部落格已移至 http://blog.gogl.top 很多時候,我們需要做到,當用戶登入成功後,跳轉回登入前的頁面。如果使用者是點選"登入"連結去到登入頁面進行登入的,我們很容易跟蹤使用者的登入前的頁面。比如,在"登入"連結後加一個url引數,如:http://www.x

前臺ajax重寫方法搭配後臺filter返回status實現ajax請求登入頁面

前後端分離之後,原生的jquery的ajax不能實現控制頁面跳轉,一般會出現狀態碼302錯誤,但是可以通過重寫ajax增強方法,搭配後臺返回狀態碼錯誤實現頁面跳轉.後臺的filter核心程式碼為 HttpServletResponse httpResponse = (Ht

shiro許可權控制,會話超時登入頁面只有iframe,父頁面沒有

在使用Apache Shiro框架做許可權驗證時,因為我的頁面是使用iframe做了一個上左右的分層,上面上log,左側是選單,具體的內容則顯示在右側。 當我點選某選單,此時如果會話超時了,則登入頁面只會顯示到右側區域,看起來不是很友好,所以需要登入頁面顯示到整個瀏覽器

使用者登入登入頁面 url

在一般有使用者登入的網站中,都會有需要使用者登入後才能操作的頁面,如果在使用者登入後能跳轉到之前的頁面,就會給使用者一個很好的體驗,也能讓他們更容易的瀏覽要操作的頁面。這中間主要用到的是獲取Url引數,獲取後用於跳轉。 主要實現步驟: 為了能很好的說明,主要已兩個頁面為例,o

Iframe應用和ServletResponse重定向,session過期過濾器登入頁面

最近專案用到了ServletResponse的重定向,也就是servlet過濾器,session過期自動跳轉登入頁面,以前見過其他寫法,感覺麻煩,不就是重定向嗎,一句程式碼搞定,寫那麼多幹嘛。最近真正用到這個技術寫法,不得不去考究下。 1.session過期一般寫法 res

java 攔截器做session過期登入頁面時無法重定向問題

這個問題好坑,也沒人寫個標題出來提醒大家不要再入坑,以前只是用,沒具體自己寫寫,這次專案用到了,自己寫寫還真遇到問題,這次記錄下來防止再次入坑。 1.起初懷疑攔截器配置有問題,經過驗證,攔截器沒有問題,訪問攔截到了,response也重定向了,就是頁面無法跳轉。

spring security 登入根據使用者角色到不同的頁面

pring security 做的登入程式,不同角色的使用者登入之後,可能會跳轉到不同的頁面,在預設情況下的配置,都是跳轉到同一個頁面,因為在 form-login 中設定的 default-target-url 就是登入後應該跳轉到的頁面。如何使得不同角色的使用者登入後跳

react axios和ajax網路請求攔截(session過期登入頁)

網路請求攔截經常也可用到,比如在所有介面訊息請求頭部加上驗證資訊token之類的,或者介面報某類錯誤時統一處理。這裡主要用在請求介面時,判斷session是否過期,統一返回狀態碼區分,如果過期了跳轉登入頁重新登入 攔截axios部分 重新封裝axios請求

專案訪問index.html,預設到login.jsp頁面,隱藏位址列每次顯示請求路徑和引數,定個在域名不變

知識點 1.兩種方法頁面進行載入跳轉到主頁 2.位址列保持域名不變的實現 詳細 一、兩種方法頁面進行載入跳轉到主頁 1.index.html為專案WEB.xml中配置的預設載入頁面,輸入域名訪問in

Ajax Session失效登入頁面的方法

在Struts應用中,我們發出的請求都會經過 相應的攔截器進行相關處理,一般都會有一個使用者登入攔截(Session失效攔截);一般請求的話,如果Session失效時,我們會跳到登入頁面,可是如果我們採用AJAX請求時,將會返回登入頁面的HTML程式碼,這肯定不是我們想要的,

iOS 實現點選tabbar登入頁面

在APP的設計中常常有需要點選tabbar直接進行跳轉登入的操作。下面說一下需要怎麼來實現這個操作。 程式碼。 (BOOL)tabBarController:(UITabBarController )tabBarController should

shiro +springmvc無許可權到指定錯誤頁面

    最近在shiro+springMvc來控制權限的時候出現沒有許可權的時候不會跳到指定的固定頁面,而是顯示錯誤程式碼在頁面,這其實不是我想要的效果。首先我們要知道為什麼會這樣,然後再去找解決的方法。     原因:     由於我們架構是用springmvc框架來搭建

servlet中實現提示登入成功後到某一頁面

一般J2ee中Jsp+Servlet+JavaBean的servlet中實現的是DoGet和DoPost函式,主要用到DoPost函式打印出某一頁面。 我在servlet中進行了身份驗證,驗證成功後,提示登入成功,之後跳轉到個人主頁等其他頁面,也可以實現提示

ionic 1頁面登入頁面後,返回按鈕處理

說到ionic返回按鈕,可能第一想到的就是ionic在app.config中配置按鈕的情況,小夥紫還不錯嘛。 這篇blog想討論的恰好不是這個,不過也和他有關啦,就因為這個按鈕,在正常頁面跳轉時候,肯定是需要的。 凡事總有例外: 很多情況下,比

springmvc控制登入使用者session失效後登入頁面

第一步,配置 web.xml [html] view plain copy   print? <spanstyle="font-size:18px;"><session-config>     <session-timeou

完美解決DiscuzX3.2版本的QQ登入到完善資訊頁面完成註冊流程

(附:更新時間2016年10月19日)很多站長都會遇到這個問題: 1、QQ登入後需要完善資訊,才能正常使用,另外一個就是QQ登入了沒有自動跳轉到完善資訊頁面。 2、 點選完善資訊,填寫了資料後提交出現賬號已註冊。 解決方法思路是這樣的: 第一步 : 開啟檔案source/p

Android中當前Activity到當前Activity頁面

頁面 context android plan nbsp text ini putextra min 步驟:先關閉自己,在跳轉 case R.id.btn_copy:// 復制 Toast.makeText(mContext, "正在復制", Toast.LEN

<問題解決10>使用帶有框架的頁面到登錄頁面時,登錄頁面只顯示在子框架中,未能鋪滿整個瀏覽器--解決方案如下:

頁面 tro color 過期 描述 例如 ren 方案 col 問題描述:     使用帶有框架的頁面跳轉到登錄頁面時,登錄頁面只顯示在子框架中,未能鋪滿整個瀏覽器,例如:     當登錄信息過期時,點擊左邊的菜單欄會讓登錄頁面顯示在右邊的框架中,而不能鋪滿整個瀏覽器  

js / ajax 成功提交後怎麽到另外一個頁面

tar oca top for ext frame 跳轉 舉例 target jsx/ajax提交成功後采用以下方式跳轉:1、本頁面跳轉:"window.location.href"、"location.href" 2、上一層頁面跳轉:"parent.location.hr