1. 程式人生 > >在jsp中怎麼實現登入後自動跳轉到登陸前瀏覽頁面

在jsp中怎麼實現登入後自動跳轉到登陸前瀏覽頁面

在jsp中怎麼實現登入後,自動跳轉到登入前正瀏覽的頁面?就像csdn的一樣,
不管你從哪能個頁面登入,成功登入後會自動跳轉回那個頁面。
解決方法一:
登入處理後,返回如下內容:   
 2  PrintWriter out  =  response.getWriter();
 3  
 4  out .println( " <!DOCTYPE HTML PUBLIC  "" -//W3C//DTD HTML 4.01 Transitional//EN "" > " );
 7  
 8  out.println( " <HTML> " );
 9 
11  
12  out.println( "   <BODY> " );
13
  
16  out.println( " <script>history.go(-1);history.go(0);</script> " ); 
19  
20  out.println( "   </BODY> " );
21  
22  out.println( " </HTML> " );
23  
24  out.flush();
25  
26  out.close();
27  
28  return   null ; 
29  
解決方法二:    

1
 String referer 
=
 req.getHeader(
"
Referer
"
);
2
 resp.sendRedirect(referer);
3 return ;
4  
5  
上面兩種方法不可取是因為,如果使用者登入失敗,再次登入的話就會出現登入後返回到登入的錯誤。

第三種:把你要在跳轉時需要儲存的資訊存放在session變數中,登入後清除這個session。可行。
需要登入操作的頁面上面新增:
1  <% 
2       if (session.getAttribute( " party " ) ==   null ){
3           if ( null   !=  request.getQueryString())
4              session.setAttribute( " redirectUrl " , request.getRequestURL().append( " ? ").append(request.getQueryString()).toString());
5
           else 
6              session.setAttribute( " redirectUrl " , request.getRequestURL().toString());
7          response.sendRedirect(request.getContextPath()  +    " /loginto " );
8      }
9  %>
在登入處理頁面:

1  String redirectUrl  =  (String)req.getSession().getAttribute( " redirectUrl " );
2           if (StringUtils.isValid(redirectUrl)){
3              req.getSession().removeAttribute( " redirectUrl " );
4              resp.sendRedirect(redirectUrl);
5          }
第四種方法:寫一個servlet會話判斷類,如果線上就繼續執行,不線上則提示登入。所有的需要線上操作的
servlet都整合此類,這樣就不需要上面那麼在每個頁面寫上這些程式碼了,可以集中控制。這種方式比較完整。

HttpSession session  =  request.getSession();

if  (session.getAttribute( " person " )  ==   null ) 
{
     if  ( null   !=  request.getQueryString())
                session.setAttribute( " redirectUrl " , request.getRequestURL().append( " ? ").append(request.getQueryString()).toString());
     else 
                session.setAttribute( " redirectUrl " , request.getRequestURL()
                        .toString());
     response.sendRedirect(request.getContextPath()  +   " /login.jsp " );
     return   null ;
 }

return  process(config, request, response);
原文:http://www.iteye.com/topic/383977

今天想實現這個功能,網上說是用 referer 來實現。不過referer也有幾個問題: 
1 當開啟一個新視窗 直接輸入網址 瀏覽器似乎不會發送referer 頭 
2 當通過js window.open等函式開啟也不回產生 
3 referer 傳送與否 在瀏覽器是可設定的(當然估計也沒多少人會去設定) 

這裡我結合struts2 說下我的實現方法: 

Java程式碼  收藏程式碼
  1. package com.snail.commons.interceptors;  
  2. import java.util.Enumeration;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5. import javax.annotation.Resource;  
  6. import javax.servlet.http.Cookie;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9. import javax.servlet.http.HttpSession;  
  10. import org.aopalliance.intercept.Invocation;  
  11. import org.apache.commons.lang.StringUtils;  
  12. import org.apache.log4j.Logger;  
  13. import org.apache.struts2.ServletActionContext;  
  14. import org.apache.struts2.StrutsStatics;  
  15. import org.hibernate.criterion.Expression;  
  16. import org.springframework.context.annotation.Scope;  
  17. import org.springframework.stereotype.Controller;  
  18. import com.opensymphony.xwork2.ActionContext;  
  19. import com.opensymphony.xwork2.ActionInvocation;  
  20. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  21. import com.snail.commons.basedao.IBaseDAO;  
  22. import com.snail.component.beans.Huiyuan;  
  23. @Scope("prototype")  
  24. @Controller("loginInter")  
  25. public class LoginInter extends AbstractInterceptor  
  26.     {  
  27.         private final static Logger logger=Logger.getLogger(LoginInter.class);  
  28.         public final static String SESSION_KEY="User";  
  29.         public final static String COOKIE_KEY="12cd";  
  30.         public final static String GOTO_URL_KEY="GOING_TO";  
  31.         @Resource(name="baseDAO")  
  32.         protected IBaseDAO baseDAO;  
  33.     @Override  
  34.     public String intercept(ActionInvocation invocation) throws Exception  
  35.         {  
  36.             HttpServletRequest request=ServletActionContext.getRequest();  
  37.             HttpServletResponse response=ServletActionContext.getResponse();  
  38.             HttpSession session=request.getSession();  
  39.             //通過session 判斷使用者是否登入,沒有則繼續讀取cookie  
  40.             if(session!=null&&session.getAttribute(SESSION_KEY)!=null)  
  41.                 {  
  42.                     return invocation.invoke();  
  43.                 }  
  44.             Cookie[] cookies=request.getCookies();  
  45.             if(cookies!=null&&cookies.length!=0)  
  46.                 {  
  47.                     for(Cookie cookie:cookies)  
  48.                         {  
  49.                             if(COOKIE_KEY.equals(cookie.getName()))  
  50.                                 {  
  51.                                     String value=cookie.getValue();  
  52.                                     if(StringUtils.isNotBlank(value))  
  53.                                         {  
  54.                                             List<Huiyuan> huiyuans=baseDAO.findEntityProperty(Huiyuan.class, Expression.eq("yongHuMing", value));  
  55.                                             if(huiyuans.size()==0)  
  56.                                                 {  
  57.                                                     cookie.setPath("/");  
  58.                                                     cookie.setValue(null);  
  59.                                                     cookie.setMaxAge(0);  
  60.                                                     response.addCookie(cookie);  
  61.                                                     return "index";  
  62.                                                 }  
  63.                                             if(huiyuans.get(0)!=null)  
  64.                                                 {  
  65.                                                     session.setAttribute(SESSION_KEY, huiyuans.get(0));  
  66.                                                     logger.info("讀取cookie:繼續");  
  67.                                                     return invocation.invoke();  
  68.                                                 }  
  69.                                         }  
  70.                                 }  
  71.                         }  
  72.                 }  
  73.             //這裡是關鍵點了 設定客戶原來請求的url地址  
  74.             setToGoingURL(request,session, invocation);  
  75.             return "index";  
  76.         }  
  77.     private void setToGoingURL(HttpServletRequest request,HttpSession session,ActionInvocation invocation)  
  78.         {  
  79.             //如果referer不為空 直接使用它。如果為空我們分別獲得名稱空間,action名,以及請求引數  
  80.             //從新構造成一個URL儲存在session中  
  81.             String url=request.getHeader("referer");  
  82.             logger.info("待轉向URL:"+request.getHeader("referer"));  
  83.             if(url==null||url.equals(""))  
  84.                 {  
  85.                     url="";  
  86.                     String path=request.getContextPath();  
  87.                     String actionName=invocation.getProxy().getActionName();  
  88.                     String nameSpace=invocation.getProxy().getNamespace();  
  89.                     if(StringUtils.isNotEmpty(nameSpace))  
  90.                         {  
  91.                             url=url+path+nameSpace;  
  92.                         }  
  93.                     if(StringUtils.isNotEmpty(actionName))  
  94.                         {  
  95.                             url=url+"/"+actionName+".action"+"?";  
  96.                         }  
  97.                     Map<String,String[]> zzMap=request.getParameterMap();  
  98.                     if(zzMap!=null)  
  99.                         {  
  100.                             for(String s:zzMap.keySet())  
  101.                                 {  
  102.                                     String[] value=zzMap.get(s);  
  103.                                     for(String val:value)  
  104.                                         {  
  105.                                             url=url+s+"="+val+"&";  
  106.                                         }  
  107.                                 }  
  108.                         }  
  109.                     logger.info("完整URL:"+url);  
  110.                 }  
  111.                     session.setAttribute(GOTO_URL_KEY, url);  
  112.         }  
  113.     public void setBaseDAO(IBaseDAO baseDAO)  
  114.         {  
  115.             this.baseDAO = baseDAO;  
  116.         }  
  117.     }  

相關推薦

jsp怎麼實現登入自動登陸瀏覽頁面

在jsp中怎麼實現登入後,自動跳轉到登入前正瀏覽的頁面?就像csdn的一樣, 不管你從哪能個頁面登入,成功登入後會自動跳轉回那個頁面。 解決方法一: 登入處理後,返回如下內容:    2  PrintWriter out  =  response.getWri

IIS實現HTTPS的自動

還是上次使用的Derwer.com,因為騰訊雲提供了一年免費的TrustAsia DV SSL證書,由賽門鐵克(Symantec)頂級根證書籤發,亞洲誠信(TrustAsia)提供技術支援,據說價值1900/年。不過誰知道呢,先用著再說。配置IIS中的域名證書很簡單,在這裡也

Android實現固定時間自動的幾種方式

1.Thread+Handler Handler handler = new Handler(new Callback() { @Override public boolean handleMessage(Message msg) {

JSP實現幾秒自動頁面頁面上顯示時間在走動

<script language="javascript"> var times=6; clock(); function clock() {    window.setTimeout('clock()',1000);    times=times-1;    t

js實現進入頁面自動到錨點

是你 .com get targe aid split www. tps com $(function(){ var url = window.location.toString();//進這個頁面的url var id = url.split(“#”)[1];

javaweb當登入之後怎麼在session過期自動登入頁面

web.xml配置: 錯誤頁面配置: 程式碼: <script language="JavaScript"> alert("登入超時請重新登入!") top.location.href ="${pageContext.request.contextPath }/a

JSP實現界面的自動的幾種方式

con 進行 檢查 fonts 控制 settime esp 註意 一點 下面來談一談在jsp中實現的幾種界面自動跳轉的方法。 使用JavaScript腳本 <html> <script language=javascript> functio

計時3秒自動到登錄頁

-- login element html 計時 document func ear function <script> //計時3秒後自動跳轉到登錄頁 var i = 3; var time_out; time_out = setInt

JSP使用window.location.href()和傳遞引數。

  JSP中使用window.location.href()跳轉和傳遞引數 在按鈕上新增onclick時間,並傳遞引數給js函式,引數可以為input中輸入的值,也可以為jsp中獲取的值。 onclick="doDelete(${student.id}) 然後呼叫js中的函

django框架 使用者登入post請求 源地址的方法

兩種方式實現使用者登入後網頁跳轉至源地址 常見的網站需要實現登陸後自動跳轉至源地址頁面,在get請求中,可以通過獲取Http中的referer地址實現;而在post請求中則無法直接通過獲取的地址進行跳轉。下面介紹兩種在Django框架中實現post請求跳轉源地址網頁的方式。 首先看一

React利用路由實現登入介面的

React利用路由實現登入介面的跳轉 上一篇在配置好了webpack和react的環境後,接下來開始寫登入介面,以及接下來的跳轉到主頁的功能。 **1、首先看一下總體的目錄結構。**因為很多時候在看別人寫的例子的時候因為目錄結構不熟悉後邊會出現意想不到的岔子。 。 2、大體流程: 1)we

wordpress登入直接回首頁

Wordpress登入後預設是直接進入後臺的,怎麼改成登入後進入網站首頁或重新進入登入前瀏覽的頁面? 首先定位到登入連結所在位置,你會看到類似下面的程式碼: <a href="<?php echo wp_login_url(); 

Android歡迎頁面2秒鐘自動到主頁面

頁面跳轉 一、功能介紹 開啟APP先進入歡迎頁面,2秒鐘後自動進入主頁面 二、專案結構分析 三、詳細程式碼 1、WelcomeActivity.java package com.xingyun.shoopingmail4; import android.app.Activity; import

Tomcat實現不帶專案名稱訪問,實現方式:自動到指定頁面,不改變URL

tomcat實現不帶專案名稱訪問專案 當通過瀏覽器訪問tomcat時,如果只有ip+埠而沒有專案名稱,則訪問的是webapps/ROOT/index.html, 修改Tomcat的webapps/ROOT/index.html自動跳轉到指定url即可 自動跳轉到指定

微信自動第三方瀏覽器指定頁面實現方式

微信被認為是目前最具營銷價值的營銷渠道之一,沒有之二,原因很簡單,微信是目前超高活躍度的app穩穩第一名,正所謂哪裡有流量哪裡有江湖,所以無數的營銷人夜以繼日的奮鬥在微信營銷的浪潮中 解決方案:微信中開啟連結,自動開啟外部瀏覽器開啟頁面 微信中點選或開啟連結,自動開啟外部瀏覽器下載app。全程完全自動化,

問題解決:下載的網頁開啟自動到首頁

提出問題 我把CSDN上的某篇部落格下載到本地,用瀏覽器開啟,看著看著,不到5秒鐘就會跳轉到CSDN的首頁,實在是鬧心啊。有沒有解決辦法呢? 解決問題 用文字編輯器開啟(下圖以Notepad++為例),搜尋關鍵詞onerror,找到下圖中所示的一行: 【

javascript 一個文字框輸入完畢自動到下一個文字框的方法

<!DOCTYPE html> <html> <head> <title>js24.html</title> <meta http-equiv="keywords" content="

手機端如何實現在QQ或者微信自帶瀏覽器開啟連結自動到預設瀏覽器開啟?

很多朋友的APP推廣連結需要在微信中進行的網頁宣傳、傳播、下載等等,但是各位朋友一定發現了微信中是遮蔽掉了APP的下載連結的。但是微信最為一個最大的社交平臺,為了自身的利益,遮蔽掉了所有APK的下載連結。我們要怎麼解決這個問題呢? 解決方案: 我們基於微信介面開發了一款全

使用nginx實現http訪問自動到https埠

作業系統:windows 2008 nginx版本:1.9.6 修改nginx的配置檔案:nginx.conf 在http{}中,新建一個server,如下的格式     server {         listen       80;         listen  

小宗的啟示:不同型別的liferay使用者登入到不同頁面登入個性化)——liferay5.0.1使用者登入(二)

在liferay5.0.1使用者登入後的跳轉(一) 中,提到新建使用者在去掉首次登入的條例說明,可以自動跳轉到portal.properties設定的固定頁面上。 問題又來了,在實際應用中,不同使用者需要登入到不同頁面進行。而liferay設定的登入跳轉是侷限的,使得不同使用