一行代码解决的问题

 

人活久了什么鸟都能见到,代码敲久了什么问题都能见到。问题产生后总有些惰性,懒得去改。到头来却是非不为也,实不知也。知道了其实也就是一行代码的事儿。

前段时间做了一个登陆功能,本来以为是手到擒来的小活,没怎么放到心上,但真正用起来细节问题处理的实在粗糙。
功能很简单,就是常见的登陆,但是不使用session,改用redis缓存记录登陆标识。
遇到的问题,不再这细说了,大多是项目中特殊情况引起的。在此单表一例。登陆后跳转到登陆前的页面。

第一版代码如下:

private void jumpLoginPage(HttpServletRequest request,HttpServletResponse response) throws IOException{
String redirectUrl = request.getRequestURL().toString();
String queryString = request.getQueryString();
if(null!=queryString){
redirectUrl = URLEncoder.encode(redirectUrl+"?"+queryString, "UTF-8");
}
response.sendRedirect(loginUrl+"?redirectUrl="+redirectUrl);
}

五分钟写完,提交svn,然后愉快的去大群水了。

第二天,就有人开始发现问题了:

登陆成功,停留在一个页面,当登陆标识失效后,点击页面的按钮发送post请求,请求被拦截后跳转到登陆页面,输入账号,密码,点击登陆,登陆成功跳转到之前页面(此处应为跳转的之前的请求,即点击按钮发送的请求),然后。。。。悲剧了,由于改请求只支持post方式,所以400错误。

修改,第二版代码

private void jumpLoginPage(HttpServletRequest request,HttpServletResponse response) throws IOException{
String redirectUrl = request.getHeader("Referer");
response.sendRedirect(loginUrl+"?redirectUrl="+redirectUrl);
}

然后,愉快的去水了。。。

第三天

登录成功后跳转的是之前停留的页面,而不是请求的页面

修改,第三版代码


private void jumpLoginPage(HttpServletRequest request,HttpServletResponse response) throws IOException{ String redirectUrl = request.getHeader("referer"); String requestUrl = request.getRequestURL().toString(); if(isAjax(request) || !"get".equalsIgnoreCase(request.getMethod())){ response.sendRedirect(loginUrl+"?redirectUrl="+redirectUrl); }else{ redirectUrl = requestUrl; String queryString = request.getQueryString(); if(null!=queryString){ redirectUrl = redirectUrl+"?"+queryString; } redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8"); response.sendRedirect(loginUrl+"?redirectUrl="+redirectUrl); return; } }

非get类型的请求及ajax请求跳转到refer的页面,其他的跳转到请求的页面

然后,还能愉快的水会儿吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值