1. 程式人生 > >判斷session失效,並跳轉到登入頁面

判斷session失效,並跳轉到登入頁面

一,首先在登入頁面加入以下程式碼,作用是使用ifrme等載入頁面時,跳轉登入頁面會巢狀在框架內,讓登入頁面全屏

<script language="JavaScript">
    if (window != top)
    {
        top.location.href = location.href;
    }
</script>

二,在web.xml中配置過濾器,過濾所有的action判斷session是否過期

<!-- session過濾器配置相關 -->
<filter>
  <filter-name>SessionFilter</filter-name
>
<filter-class>com.wonders.filter.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>SessionFilter</filter-name> <url-pattern>*.action</url-pattern> <!--<dispatcher>FORWARD</dispatcher>--> <!--在這種情況下,如果請求是以/contract/…或者/user/…開頭的,並且是通過request dispatcher的forward方法傳遞過來或者直接從客戶端傳遞過來的,則必須經過這個過濾器。-->
<!--<dispatcher>REQUEST</dispatcher>--> </filter-mapping>

三,相關的過濾類

該類中主要判斷action是否是生成驗證碼和跳轉到登入頁面的類,如果是以上兩個類則不過濾,否則無法顯示登入頁面和驗證碼,除此以外的都可以過濾

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet
.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.wonders.admin.model.User; import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; public class SessionFilter implements Filter { @Override public void destroy() { // 過濾器銷燬,一般是釋放資源 } /** * 某些url需要登陸才能訪問(session驗證過濾器) */ @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; // HttpSession session = request.getSession(); //判斷session是否過期 HttpServletRequest sr = (HttpServletRequest) request; String strURL = sr.getRequestURL().toString(); //此處是判斷url如果是登入頁面和生成驗證碼的action則不執行過濾 if (strURL.indexOf("/code.action") == -1 && strURL.indexOf("/login.action")== -1) { //獲得session判斷是否存在 Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); User user =(User)session.getAttribute("user"); if (user == null) { String errors = "您還沒有登入,或者session已過期。請先登陸!"; request.setAttribute("Message", errors); //跳轉至登入頁面 request.getRequestDispatcher("/login.jsp").forward(request, response); } else { arg2.doFilter(request, response); } } else { arg2.doFilter(request, response); } } @Override public void init(FilterConfig arg0) throws ServletException { // 初始化操作,讀取web.xml中過濾器配置的初始化引數,滿足你提的要求不用此方法 } }

通過以上過濾就可判斷session過期時自動跳轉到登入頁面,而不是點選操作時沒反應。

相關推薦

判斷session失效登入頁面

一,首先在登入頁面加入以下程式碼,作用是使用ifrme等載入頁面時,跳轉登入頁面會巢狀在框架內,讓登入頁面全屏<script language="JavaScript"> if (window != top) { top.locat

spring security 採用 資料庫配置檢測使用者登入不同頁面

applicationContext-security.xml <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schem

js獲取url 中的值相應頁面

實現方法:一:獲取URL帶QUESTRING引數的JAVASCRIPT客戶端解決方案,相當於asp的request.querystring,PHP的$_GET1.函式:<Script language="javascript">function GetRequest() {var url = lo

js檢查ie低版本瀏覽器更新頁面

引言 現在我們用的一些主流前端框架,如vue, angular, react等對低版本的ie瀏覽器支援不好,一般指的是ie9以下的。如果低版本ie瀏覽器,開啟我們的網站頁面時, 我們希望給使用者溫馨的提示,去升級瀏覽器,而不是頁面混亂,各種報錯。 怎

掃描二維碼下載app判斷是Android還是ios到不同的下載地址

寫在前面 通常,我們開發一個app,有Android版本,有ios版本,但是,我們有時候只有一個二維碼可以放置,比如,通過社會化分享,分享到微信一張圖片,通過微信識別二維碼來下載我們的app,此時,只有一個二維碼, 那麼怎樣,讓ios系統使用者掃描二維碼下載的

Ajax Session失效登入頁面的方法

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

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

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

django寫使用者登入判定制定頁面

1.首先看要設定登陸的介面 book/view.py @user_util.my_login #相當於 select_all=my_login(select_all) def select_all(request): # 查詢所有的書 book_list = Boo

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

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

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

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

PC端判斷螢幕寬度到達手機寬度的時候直接手機頁面

<script> // //判斷螢幕寬度到達手機寬度的時候,直接跳轉手機頁面 // window.addEventListener("resize", function()

h5 網頁 直接喚起淘寶app到對應商品頁面

<a href="https://t.asczwa.com/taobao?backurl=開啟淘寶需要顯示的頁面連結">淘寶</a> 商品連結獲取方法: 點選淘寶右上角,選擇分享,點選複製連結,粘貼後裡面就有商品頁面對應的連結

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

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

android鎖屏狀態下 新訊息喚醒螢幕到指定頁面

最近在做一個專案,有個功能,就和QQ電話差不多,我這邊手機鎖屏狀態,當QQ電話過來時,立刻喚醒螢幕,並顯示QQ來電介面,我的是當裝置端有事件發生時通知app端彈出介面,實時顯示裝置端資訊。 最核心的程

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

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

自動識別PC端、移動端

PC端和移動端程式碼是分開的,各有一套程式碼的情況下: 在PC端的HTML檔案head標籤中間新增一段自動識別移動端的JavaScript程式碼: <script type="text/javascript"> if(/Android|webOS| iPhone | iPad | iPo

vue2自定義分頁元件可設定每頁顯示數量指定具體頁面

分頁元件 <template> <div> <div class="page-helper" v-if="showPageHelper"> <div class="page-list">

iOS 實現點選tabbar登入頁面

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

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

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

mvc ajax 請求 session失效登入

 public class BaseController : Controller    {        ///        /// 登入驗證/掉線攔截        /// protected override void OnActionExecuting(ActionExecutingContext