网站开发中经常会遇到这样的问题,登录后自动转到了首页或者用户管理首页,这样有时候会让用户觉得很不方便,特别是电子商务类的网站,当用于在浏览产品页面时,需要购买,但是只有登录后的用户才能进入购买页面,所以如果当用户登录后进入的不是他登录前的产品浏览页面,他得去重新找,这是非常不友好的。
可以通过request.getHeader("referer");方式来实现登录/注册后返回进入登录或注册页面前的页面
举例:
java 代码
-
-
-
-
-
-
-
-
-
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 代码
-
-
-
-
-
-
-
-
-
-
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);
-
}
-
-
-
-
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行的代码就实现了跳转。
分享到:
相关推荐
代码为ASP.NET C#,采用asp.net和jquery异步方式实现。 用户登录采用模态弹出窗口,异步方式验证登录信息,不刷新页面。 用户注册,能检查用户名和密码是否为空,当用户输入用户名时可采用异步方式从数据库提取...
主要介绍了vue实现未登录跳转到登录页面的方法,主要目的是实现未登录跳转,需要的朋友参考下吧
WPF开发的操作员登录程序,通过mysql数据库验证,跳转到主界面。
使用AndroidQQ登录。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下
但是这二维码还有一个需求就是,用户已经下载了这个app,当用户打开app进入到注册页面时,再次扫描这个二维码时,自动填写邀请码进行注册。那么该如何实现,细节就不说了,直接上代码。 使用js实现,其实代码非常...
而对于某些功能页面,会尝试获取本地存储中的token进行判断,存在则可进入,否则跳到登录页或弹出登录框。 而在vue单页中,我们可以通过监控route对象,从中匹配信息去决定是否验证token,然后定义后续行为。 具体...
而对于开发工程师来说,把这几个页面实现了并实现数据的闭环处理,一个app 的框架也就大致实现了。一般的我们关注的几个页面如下:(专业词汇是否这样请指教) 引导页面(Guide page/onBoarding,好像国内外称呼不...
基于python opencv人脸识别的签到系统前言先看下效果实现的功能开始准备页面的构建功能实现代码部分总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人脸实时签到系统,作者某...点击注册会跳到注册页面进
<br>此版本包含注册文件和简体中文语言安装包 <br>Enhancements in PL/SQL Developer 7.1.5 ====================================== - Fixed some access violations - Inserting a record in the ...
<br>此版本包含注册文件和简体中文语言安装包 <br>Enhancements in PL/SQL Developer 7.1.5 ====================================== - Fixed some access violations - Inserting a record in the ...
前段时期一直使用三层来写从页面对数据库的增删改查,今天用hibernate框架来实现从...1、用户能够注册,2、注册成功后直接跳到登录页面,3、登录成功后直接跳到对公司、人员的增删改查, 4、要有对人员界面的分页功能
<br>此版本包含注册文件和简体中文语言安装包 <br>Enhancements in PL/SQL Developer 7.1.5 ====================================== - Fixed some access violations - Inserting a record in the ...
本次实验主要是显式Intent的使用方法以及如何通过显式Intent在不同的Activity之间实现跳需要注意的: - 显式Intent是指明了跳转目标的Intent对象。可以通过指明目标Activity的包名、类名或Intent的构造函数等方式来...
读者可以注册登录,登录时会判断账号类型再分别跳到各自对应的页面,读者可以查找,借阅,还书,查看历史借阅记录,修改个人资料,密码。 管理员可以修改添加图书,修改添加读者,修改添加分类,管理借阅信息等等...
这是一套完整的web前端旅游页面, 一共7个页面, 并且在登录、注册时具有js表单校验, 页面之间实现了跳转。
Android实现一个简易版本的购物车小...1、用户注册、用户登录。 2、商品、购物车列表 (2)android 1、ViewPager2 + Fragment实现页面的切换。 2、SQLite数据库、基础组件的使用。 3、shape和selector修饰组件样式。
4.3 无类域前路由(CIDR) 38 4.3.1 无类地址 38 4.3.2 强化路由汇聚 39 4.3.3 超网化 39 4.3.4 CIDR怎样工作 39 4.3.5 公共地址空间 40 4.3.6 RFC 1597和1918 40 4.4 小结 40 第5章 ARP和RARP 41 5.1 使用地址 41 ...
其实像这类的文章网上已经有很多很好的,写这篇文章,相当于是做个笔记,以防以后忘记 用到的:1、 vuex 2、axios...// 初始化时用sessionStore.getItem('token'),这样子刷新页面就无需重新登录 const state = { user: