我在登出之后不但返回到剛才的頁面。還因為我設置了攔截器而導致頁面出現了我並不想看到的結果。
於是我着手對着問題進行了優化解決:
一開始我想這么做:在每張頁面都有session判斷,如果session為空則返回登錄界面。但是就結果而言。出現了上面圖片中的結果
后來我又想從前端頁面着手,通過寫js window.location.href返回登錄界面。
這是代碼:
<script type="text/javascript">
windows.location.href="/login/index"
</script>
在IE瀏覽器中完美解決。但我用火狐測試了一下。。。唉。?還是不得行?
我馬上去檢查了我的java代碼
//獲得session HttpSession session = req.getSession(); //拿到session里面的屬性 Object attribute = session.getAttribute("USER_IN_SISSION"); //如果前台沒有傳信息,就跳轉回登陸頁面 if (attribute==null) { //跳轉回登陸頁面 req.getRequestDispatcher("/login/index").forward(req, resp); System.out.println("攔截器執行了"); return false; } return true;
@RequestMapping("/out") public String out(HttpServletRequest req) throws ServletException, IOException { // 獲得session HttpSession session = req.getSession(); // 刪除session里的內容 session.removeAttribute("USER_IN_SISSION"); return "redirect:/login/index"; }
上面這段代碼完全沒執行。
我又看了看xml配置
<mvc:interceptors> <mvc:interceptor> <!-- 不放行的 --> <mvc:mapping path="/**"/> <!-- 放行的 --> <mvc:exclude-mapping path="/login/*"/> <mvc:exclude-mapping path="/static/**"/> <mvc:exclude-mapping path="/index/*"/> <mvc:exclude-mapping path="/upload/*"/> <mvc:exclude-mapping path="/templates/*"/> <!-- 配置攔截器 --> <bean class="cn.king.web.Intercetor" /> </mvc:interceptor> </mvc:interceptors>
嗯。。。我自閉了。。。
我打了斷點進debug調試。后台代碼沒什么問題。我想那就是前台頁面了。我跟着去驗了驗攔截器對我沒放行的路徑是否進行了攔截。
結果,我發現了我這個項目的一個bug
因為我的主頁面是這樣寫的:
主頁是導航欄菜單欄然后嵌套展示頁面
因為展示頁面都是引用的。所以展示頁面上面就不能寫上導航欄和菜單欄了。導致如果你不在原路徑訪問展示頁面。通過展示頁頁面的路徑來訪展示頁。就會出現,導航欄和菜單欄消失的情況
所以當我刪除了session后,用戶通過瀏覽器返回按鈕能回到剛才那個頁面。但那個頁面是瀏覽器緩存所致。
點擊操作的時候只有展示頁進行了權限跳轉。所以出現了我上面那個效果圖。
這個情況我只有換前端頁面了。因為后台代碼邏輯確實有點難處理這個問題。