Shiro整合SSH開發3:配置Shiro認證後頁面地址跳轉問題(和詳述不配置需要注意的問題)

     在視頻教程中講請求認證成功後跳轉頁面的問題是一筆帶過的,但是我覺得有必要單獨寫一篇對應的文章進行敘述。
     我用了SSH來整合Shiro,在開發後驗證的過程中,每次登陸後Shiro都會跳轉到一個不知名js中,但是重點是我上一次訪問的地址是:
http://localhost:8080/shiro_05/user/login.action

認證之後應該跳轉到上一個請求的地址,但是Shiro卻跳轉到了:

http://localhost:8080/shiro_05/user/js/eqmt.js
本應該跳轉到上一次訪問的頁面的,但是卻跳轉到這個js文件的請求路徑中,而且這個路徑還是奇奇怪怪的。
我猜這個問題應該困擾了不少人,即使js、css等文件夾配置了匿名訪問等,還是出現這個問題:【認證後地址亂跳,不是上一個你所請求進來時候所在的地址】。甚至有人放棄了Shiro自帶的“跳轉到上一個請求路徑”這個功能。應該也有很多人解決了這個問題,在這裏,我就簡單說一下吧。
經過檢查後終於發現問題所在:在頁面中存在另一個非絕對路徑的請求地址!


此文老貓原創,轉載請加本文連接:http://blog.csdn.net/nthack5730/article/details/51132560

更多有關老貓的文章:http://blog.csdn.net/nthack5730



首先說一下在Shiro中配置默認認證成功後跳轉的地址或者請求:
在shiroFilter的Bean配置中
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
....
</bean>

添加一下驗證成功後的地址參數:

<property name="successUrl" value="/user/list.action" />
就可以使每次在認證成功後自動轉發到value裏面的地址(我這裏用的是/user/list.action,也就是去請求這個地址)

當不配置這個參數的時候,Shiro會自動請求上一次你訪問的地址。假設,你訪問地址:http://localhost:8080/shiro_01/user/

現在假設這個地址是需要認證通過才能訪問的,也就是在過濾鏈中配置爲/user/** = authc

那麼就會進入認證頁面,而上面的地址就會被保存至Shiro中,當認證通過後,會自動請求瀏覽器訪問剛剛保存的地址
http://localhost:8080/shiro_01/user/


但是當頁面文件加載不正確,在認證完成後就會訪問地址:
http://localhost:8080/shiro_01/user/***.***

我的修改前的頁面在認證後瀏覽器會去訪問下面這個地址:
http://localhost:8080/shiro_01/user/js/eqmt.js



此文老貓原創,轉載請加本文連接:http://blog.csdn.net/nthack5730/article/details/51132560

更多有關老貓的文章:http://blog.csdn.net/nthack5730



爲什麼會出現這個問題呢,原因就在於登陸頁面中或許有部分的第三方加載的樣式、js等文件沒有被正確錄入。什麼是不正確錄入,只要是請求本地服務器,或者請求爲:http://localhost:8080/shiro_01/*******.***
這種形式的,也就是在認證前和你上一個訪問的頁面之間再訪問本服務器被shiro攔截的任意地址。就會被Shiro自動保存至上一個請求地址的這個變量中,當你認證完成後會Shiro就會要求你的瀏覽器自動跳轉到這個地址
【注:CDN掛載加載的不算,因爲不是請求本服務器。】



下面給出我的頁面代碼,裏面的請求【自帶js】這部分就是爲http請求的而不是絕對路徑加載進來的:
<!-- 公共樣式文件引入 -->
<jsp:include page="Template/css.jsp"></jsp:include>

<!-- 自帶js -->
<script src="js/eqmt.js"></script>

<!-- 自建樣式表 -->
<link href="${pageContext.request.contextPath}/css/eqmt.css" rel="stylesheet" type="text/css">
<link href="${pageContext.request.contextPath}/css/login.css" rel="stylesheet" type="text/css">
除了:<script src="js/eqmt.js"></script>
這個加載通過絕對路徑加載不成功,然後瀏覽器自動訪問了相對地址,即瀏覽器用http的形式訪問,Shiro記錄這個eqmt.js文件的訪問地址(還是錯誤的地址)其他的都是內部絕對路徑訪問的。【我在過濾鏈裏面配置了對應絕對路徑的文件的匿名訪問】
只要將錯誤加載的代碼改正或刪除或者將文件掛載到cdn訪問,問題就可以解決了:
<script src="${pageContext.request.contextPath}/js/eqmt.js"></script>
PS:裏面的:${pageContext.request.contextPath}是我的項目地址。JSP有這個蛋疼的問題,相信很多人都知道。

【上面的總結是我個人感受寫的,可能具體的學名和形容詞在形容的過程中用得不恰當,望大家發現後指出並幫忙糾正,感激不盡!】

此文老貓原創,轉載請加本文連接:http://blog.csdn.net/nthack5730/article/details/51132560

更多有關老貓的文章:http://blog.csdn.net/nthack5730




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章