在jsp中怎么实现登录后自动跳转到登陆前浏览页面


原文:http://yekui.iteye.com/blog/1084631

在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.   
  3. import java.util.Enumeration;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import javax.annotation.Resource;  
  8. import javax.servlet.http.Cookie;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import javax.servlet.http.HttpSession;  
  12.   
  13. import org.aopalliance.intercept.Invocation;  
  14. import org.apache.commons.lang.StringUtils;  
  15. import org.apache.log4j.Logger;  
  16. import org.apache.struts2.ServletActionContext;  
  17. import org.apache.struts2.StrutsStatics;  
  18. import org.hibernate.criterion.Expression;  
  19. import org.springframework.context.annotation.Scope;  
  20. import org.springframework.stereotype.Controller;  
  21.   
  22. import com.opensymphony.xwork2.ActionContext;  
  23. import com.opensymphony.xwork2.ActionInvocation;  
  24. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  25. import com.snail.commons.basedao.IBaseDAO;  
  26. import com.snail.component.beans.Huiyuan;  
  27. @Scope("prototype")  
  28. @Controller("loginInter")  
  29. public class LoginInter extends AbstractInterceptor  
  30.     {  
  31.         private final static Logger logger=Logger.getLogger(LoginInter.class);  
  32.         public final static String SESSION_KEY="User";  
  33.         public final static String COOKIE_KEY="12cd";  
  34.         public final static String GOTO_URL_KEY="GOING_TO";  
  35.         @Resource(name="baseDAO")  
  36.         protected IBaseDAO baseDAO;  
  37.     @Override  
  38.     public String intercept(ActionInvocation invocation) throws Exception  
  39.         {  
  40.             HttpServletRequest request=ServletActionContext.getRequest();  
  41.              
  42.             HttpServletResponse response=ServletActionContext.getResponse();  
  43.             HttpSession session=request.getSession();  
  44.             //通过session 判断用户是否登录,没有则继续读取cookie  
  45.             if(session!=null&&session.getAttribute(SESSION_KEY)!=null)  
  46.                 {  
  47.                     return invocation.invoke();  
  48.                       
  49.                 }  
  50.             Cookie[] cookies=request.getCookies();  
  51.             if(cookies!=null&&cookies.length!=0)  
  52.                 {  
  53.                     for(Cookie cookie:cookies)  
  54.                         {  
  55.                             if(COOKIE_KEY.equals(cookie.getName()))  
  56.                                 {  
  57.                                     String value=cookie.getValue();  
  58.                                     if(StringUtils.isNotBlank(value))  
  59.                                         {  
  60.                                             List<Huiyuan> huiyuans=baseDAO.findEntityProperty(Huiyuan.class, Expression.eq("yongHuMing", value));  
  61.                                             if(huiyuans.size()==0)  
  62.                                                 {  
  63.                                                     cookie.setPath("/");  
  64.                                                     cookie.setValue(null);  
  65.                                                       
  66.                                                     cookie.setMaxAge(0);  
  67.                                                     response.addCookie(cookie);  
  68.                                                     return "index";  
  69.                                                 }  
  70.                                             if(huiyuans.get(0)!=null)  
  71.                                                 {  
  72.                                                       
  73.                                                     session.setAttribute(SESSION_KEY, huiyuans.get(0));  
  74.                                                     logger.info("读取cookie:继续");  
  75.                                                     return invocation.invoke();  
  76.                                                 }  
  77.                                               
  78.                                         }  
  79.                                 }  
  80.                         }  
  81.                 }  
  82.             //这里是关键点了 设置客户原来请求的url地址  
  83.             setToGoingURL(request,session, invocation);  
  84.             return "index";  
  85.         }  
  86.     private void setToGoingURL(HttpServletRequest request,HttpSession session,ActionInvocation invocation)  
  87.         {  
  88.             //如果referer不为空 直接使用它。如果为空我们分别获得命名空间,action名,以及请求参数  
  89.             //从新构造成一个URL保存在session中  
  90.             String url=request.getHeader("referer");  
  91.             logger.info("待转向URL:"+request.getHeader("referer"));  
  92.             if(url==null||url.equals(""))  
  93.                 {  
  94.                     url="";  
  95.                     String path=request.getContextPath();  
  96.                     String actionName=invocation.getProxy().getActionName();  
  97.                     String nameSpace=invocation.getProxy().getNamespace();  
  98.                     if(StringUtils.isNotEmpty(nameSpace))  
  99.                         {  
  100.                             url=url+path+nameSpace;  
  101.                               
  102.                         }  
  103.                     if(StringUtils.isNotEmpty(actionName))  
  104.                         {  
  105.                             url=url+"/"+actionName+".action"+"?";  
  106.                         }  
  107.                       
  108.                     Map<String,String[]> zzMap=request.getParameterMap();  
  109.                     if(zzMap!=null)  
  110.                         {  
  111.                             for(String s:zzMap.keySet())  
  112.                                 {  
  113.                                     String[] value=zzMap.get(s);  
  114.                                     for(String val:value)  
  115.                                         {  
  116.                                             url=url+s+"="+val+"&";  
  117.                                         }  
  118.                                       
  119.                                 }  
  120.                         }  
  121.                     logger.info("完整URL:"+url);  
  122.                 }  
  123.               
  124.                     session.setAttribute(GOTO_URL_KEY, url);  
  125.                   
  126.               
  127.         }  
  128.     public void setBaseDAO(IBaseDAO baseDAO)  
  129.         {  
  130.             this.baseDAO = baseDAO;  
  131.         }  
  132.   
  133.     }  





  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值