怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker
项目中,想实现一个功能。
直接访问某个需要登录的url,比如/addArticle,可能会跳转到登录页面login.html。
登录成功之后,自动跳转到/addArticle这个登录前的页面,继续登录之前的操作。
思路很简单:
登录拦截器,获得backurl,
String backUrl=request.getRequestURI();
//返回到原来的页面,而不是系统配置的首页,更友好
response.sendRedirect(loginUrl + "?backurl=" + backUrl);
重定向登录页面:http://localhost:8080/login.html?backurl=/add
登录页面保存backurl,登录的时候,把backurl也发送到后端。
登录成功之后,再跳转到/add 这个页面。
--------------------------------
遇到一个比较麻烦的问题,怎么在Freemarker中login.ftl中获得backurl这个参数呢?
在jsp中可以使用,request.getParameter("backurl")
因此,我想在Freemarker中用${request.backurl} ,结果死活不出来。
最后找到了2种方法,传递backurl这个参数到后端:
方法1:
<input type="hidden" name="backurl" value="${RequestParameters.backurl}"/>
把参数值,放在隐藏域中,${RequestParameters.backurl}
Freemarker中获得request中的值,找了好久才找到。
http://blog.csdn.net/feiyu8607/article/details/6557159这篇文章总结得比较全面。
方法2:
<form action="/auth/dologin.json?${request.queryString}" method="post">
获得request中的queryString参数,自动加到登录请求url后面。
关键的几点:
a.当前${request}是org.springframework.web.servlet.support.RequestContext。
我想是因为SpringMVC与Freemarker结合的原因,不是JSP中的javax.servlet.HttpServletRequest(具体不确定)。
b. request.queryString,实际调用的是request.getQueryString方法。
request有哪些方法,可以参考 org.springframework.web.servlet.support.RequestContext的源码。
想看源码,体现出Maven的好处了,download source很方便。
------------------------------------------------------------------
妈个蛋啊,从创业开始,就遇到TMD的一大堆问题,仅仅是技术问题就一大堆。
从北京回到武汉工作,又遇到一大堆问题。
还好,绝大多数的问题,都被我解决了。
照目前遇到问题和解决问题的速度,再过2年,我可以秒杀应届毕业生了。
呼呼~
小喽啰们,不好意思哦,小雷要秒杀你们喽~
小雷FansUnion-博学的互联网技术工作者,提供付费的IT咨询服务
2014年12月10日
湖北-武汉-循礼门
怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker的更多相关文章
- Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)
router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...
- yii中登录后跳转回登录前请求的页面
当我们请求一个经过权限控制的请求不通过时,会跳转到一个地方请求权限,请求结束后需要跳转回之前的页面.比如我们请求一个需要登录的action,会被跳转到login页面,我们希望登录成功后跳转到我们之前希 ...
- Laravel 登录后跳转回登录前浏览的页面
一.经过 Auth 中间件检查后跳转至登录页面 也就是没有通过 auth 中间件的认证检查,被 auth 中间件拦截后跳转至登录页面.这种情况下,Laravel 默认会在用户登录成功后自动跳转回登录前 ...
- play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面
一.编写SessionFilter.scala代码 package filters import javax.inject.{Inject, Singleton} import akka.stream ...
- rails登录后跳转到登录前的路径
# 重定向到存储的地址或默认地址 def redirect_back_or(default) redirect_to(session[:forwarding_url] || default) sess ...
- 登录之后跳转到登录之前的页面 之 Referer 的坑
简而言之:通过鼠标在页面上点击链接发送请求,请求header中会包含referer信息, 通过在浏览器地址栏书写并发送请求的,header中不会有referer信息. 为了完成登录动作成功后返回原页面 ...
- VUE实现登录然后跳转到原来的页面
可以在路由里面设置需要登录的界面,判断下没有登录就跳转到登录界面,登录了就不用登录,这里用的是一个存储的 router.beforeEach((to, from, next) => { if(t ...
- ASP.NET 网站超时跳转到登录界面
利用actionFilter过滤器实现,超时跳转到登录界面 /// <summary> /// 登录超时跳转至登录界面 /// </summary> public class ...
- 关于WordPress登录后跳转到指定页面
前面在写模版的时候,有朋友要求网站登录后要跳转的到指定的页面.这个从前还真没遇到过.于是就用万能的搜索(很少百度)找了下,方法基本上就是一个,代码如下: <?php // Fields f ...
随机推荐
- thinkphp 整合 swiftmailer 实现邮件发送
thinkphp swiftmailer(phpmailer) 文件夹结构 图 1 swiftmailer-phpmailer 将swiftmailer整合到thinkphp中.如上图 1 我下载的版 ...
- [Javascript AST] 2. Introduction: Write a simple ESLint rule
What we want to do is checking if user write nested if statements which actually can combine to one: ...
- 基于Redis bitmap实现开关配置功能
作者:zhanhailiang 日期:2014-12-21 bitmap api SETBIT key offset value 对key所储存的字符串值,设置或清除指定偏移量上的位(bit). 位的 ...
- C++中引用传递与指针传递区别
C++中引用传递与指针传递区别 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程 ...
- Node.js笔记 请求方式 GET
三种方法解析url 1. 传统的字符串split切割方法 2. querystring 只能解析数据部分,不能解析前面 index.html之类的地址部分. 3. url 可以解析地址和数 ...
- jquery设置attr属性值
1.返回属性值 $(selector).attr(attribute); 2.设置属性值 $(selector).attr(attribute,value); 3.设置多个属性值 $(selector ...
- android 5.x system.img 大于2G导致编译otapackage时报错怎样处理
当system分区预制过多apk时假设img size超过2G 在make otapackage时会报例如以下错误 zipfile.LargeZipFile: Zipfile size would ...
- express 学习笔记(一)路由
先导入express: var express = require('express'); var app = express(); 1.路由方法: get, post, put, head, del ...
- 6.4 Android硬件访问服务编写HAL代码
JNI向上提供本地函数,向下加载HAL文件,并调用HAL的函数: HAL负责访问驱动程序执行硬件操作 JNI和HAL都是用c语言或者C++语言编写的,JNI加载HAL的实质就是使用dlopen加载动态 ...
- 在sublime text 3中安装中文支持 分类: C_OHTERS 2015-04-24 22:04 229人阅读 评论(0) 收藏
1.安装package control 使用control+~打开终端,然后输入以下内容并确定: import urllib.request,os;pf='Package Control.subli ...