登录注册后跳回登录注册前的页面实现方法

xiaoxiao2023-02-02  37

 

网站开发中经常会遇到这样的问题,登录后自动转到了首页或者用户管理首页,这样有时候会让用户觉得很不方便,特别是电子商务类的网站,当用于在浏览产品页面时,需要购买,但是只有登录后的用户才能进入购买页面,所以如果当用户登录后进入的不是他登录前的产品浏览页面,他得去重新找,这是非常不友好的。

可以通过request.getHeader("referer");方式来实现登录/注册后返回进入登录或注册页面前的页面

举例:

java 代码 /**    * 进入到登录页面    * @param mapping    * @param form    * @param request    * @param response    * @return    */    public  ActionForward loginview(ActionMapping mapping, ActionForm form,            HttpServletRequest request, HttpServletResponse response) {             //登录后跳转回进来的页面,如果进来之前的页面是登录和退出,则登录后跳转到首页        String pagefrom = request.getHeader( "referer" );         if (pagefrom.indexOf( "method=login" )> 0  || pagefrom.indexOf( "method=logout" )> 0 )        {            pagefrom = pagefrom.substring( 0 ,pagefrom.lastIndexOf( "/" )+ 1 );        }        request.setAttribute( "pagefrom" , pagefrom);                saveToken(request);                User object =  null ;         try  {            object = entityClass.newInstance();        }  catch  (InstantiationException e) {            log.error(e);        }  catch  (IllegalAccessException e) {            log.error(e);        }        initForm(form, request, object);         return  mapping.findForward(LOGINVIEW);    }  

 

在登录页面中设置hidden元素:

登录页面部分代码 < html:form   action = "/userm.do"   focus = "loginname"   styleClass = "u_login_form"   onsubmit = "return validateUserForm(this)" >                     < input   type = "hidden"   name = "method"   value = "login" />                     < input   type = "hidden"   name = "pagefrom"   value = "${ pagefrom }" />                     < input   type = "hidden"   name = "name"   value = "name" />                     < input   type = "hidden"   name = "mail"   value = "yahaitt@163.com" />                     < div   class = "l" > < img   src = "${css}/images/login_icon_01.gif"   /> div >                     < div   class = "l" >                         < html:text   property = "loginname"   styleClass = "text" /> < br   />                         < html:password   property = "password"   styleClass = "text" /> < br   />                         < %@ include  file = "/commons/messages.jsp"  % >                     div >                     < div   class = "l" > < html:img   src = "${css}/images/login_icon_02.gif"   onclick = "if(validateUserForm(document.userForm)) document.userForm.submit();" /> div >                     < div   class = "c" > div >                 html:form >                 < html:javascript   formName = "userForm"   staticJavascript = "false"   dynamicJavascript = "true"   cdata = "false" />                 < script   type = "text/javascript"   src = "${ctx}/scripts/validator.jsp" > script >   

 

根据登录页面中的pagefrom元素的值,在登录成功后跳转到该值对应的页面

登录代码:

java 代码         /**        * 登录        * @param mapping        * @param form        * @param request        * @param response        * @return        */         public  ActionForward login(ActionMapping mapping, ActionForm form,                HttpServletRequest request, HttpServletResponse response) {             String pagefrom = request.getParameter( "pagefrom" );            request.setAttribute( "pagefrom" , pagefrom);                         if  (isCancelled(request))                 return  list(mapping, form, request, response);             if  (!isTokenValid(request)){                saveDirectlyError(request,  "重复提交" );                 return  mapping.findForward(LOGINVIEW);            }    //      resetToken(request);                         // run validation rules on this form            ActionMessages errors = form.validate(mapping, request);             if  (!errors.isEmpty()) {                saveErrors(request, errors);                refrenceData(request);                 return  mapping.findForward(LOGINVIEW);            }                                       User object = doNewEntity(form, request);            initEntity(form, request, object);                        User user = userManagerCommon.checkPassword(object.getLoginname(), object.getPassword());             if ( null ==user)            {                errors.add( "password" , new  ActionMessage( "user.missing" ,object.getPassword()));                saveErrors(request, errors);                 return  mapping.findForward(LOGINVIEW);            }                        SessionUser.saveSession(request,user);                                     try  {                response.sendRedirect(pagefrom);                 return   null ;            }  catch  (IOException e) {                e.printStackTrace();            }                         return  mapping.findForward(INDEX);        }  

 

第48行的代码就实现了跳转。

转载请注明原文地址: https://www.6miu.com/read-4981060.html

最新回复(0)