现在的位置: 首页 > 综合 > 正文

怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker

2017年01月17日 ⁄ 综合 ⁄ 共 1475字 ⁄ 字号 评论关闭

  项目中,想实现一个功能。

    直接访问某个需要登录的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日
湖北-武汉-循礼门 

抱歉!评论已关闭.