判断session失效,并跳转到登录页面
生活随笔
收集整理的這篇文章主要介紹了
判断session失效,并跳转到登录页面
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
一,首先在登錄頁面加入以下代碼,作用是使用ifrme等加載頁面時(shí),跳轉(zhuǎn)登錄頁面會(huì)嵌套在框架內(nèi),讓登錄頁面全屏
<script language="JavaScript">if (window != top){top.location.href = location.href;} </script>二,在web.xml中配置過濾器,過濾所有的action判斷session是否過期
<!-- session過濾器配置相關(guān) --> <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>--><!--在這種情況下,如果請(qǐng)求是以/contract/…或者/user/…開頭的,并且是通過request dispatcher的forward方法傳遞過來或者直接從客戶端傳遞過來的,則必須經(jīng)過這個(gè)過濾器。--><!--<dispatcher>REQUEST</dispatcher>--> </filter-mapping>三,相關(guān)的過濾類
該類中主要判斷action是否是生成驗(yàn)證碼和跳轉(zhuǎn)到登錄頁面的類,如果是以上兩個(gè)類則不過濾,否則無法顯示登錄頁面和驗(yàn)證碼,除此以外的都可以過濾
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 {@Overridepublic void destroy() {// 過濾器銷毀,一般是釋放資源}/*** 某些url需要登陸才能訪問(session驗(yàn)證過濾器)*/@Overridepublic 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如果是登錄頁面和生成驗(yàn)證碼的action則不執(zhí)行過濾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已過期。請(qǐng)先登陸!";request.setAttribute("Message", errors);//跳轉(zhuǎn)至登錄頁面request.getRequestDispatcher("/login.jsp").forward(request, response);} else {arg2.doFilter(request, response);}}else{arg2.doFilter(request, response);}}@Overridepublic void init(FilterConfig arg0) throws ServletException {// 初始化操作,讀取web.xml中過濾器配置的初始化參數(shù),滿足你提的要求不用此方法} }通過以上過濾就可判斷session過期時(shí)自動(dòng)跳轉(zhuǎn)到登錄頁面,而不是點(diǎn)擊操作時(shí)沒反應(yīng)。
轉(zhuǎn)載于:https://my.oschina.net/mayude/blog/1796535
總結(jié)
以上是生活随笔為你收集整理的判断session失效,并跳转到登录页面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10怎么上youtube
- 下一篇: frp 初探