实现登录后url跳转回原页面

junjichu 发布于 2015/01/23 16:03
阅读 4K+
收藏 3

@JFinal 你好,想跟你请教个问题:

在登录时加了一个登录认证拦截器,未登录执行controller.render("登录页面")

之前你有说拦截器中可以获取到 url,可以通过拦截器来传递给action

当用其他url访问时会直接跳转到登录页面,后台并未访问login的controller,而且未执行。

所以不知道后台从哪个controller获取这个url

现在想实现从其他页面跳转到login页面成功后再返回,而且外部项目url跳转也需要支持,请问如何操作较好

以下是问题补充:

@junjichu:拦截器未登录时controller.render("/WEB-INF/view/" + controller.getAttrForStr("") + "/user/login.html"); (2015/01/23 16:13)
加载中
0
JFinal
JFinal

1:先判断是否登录的拦截器中将本次请求的 action 变为参数发送给显示登录页面的 action

public void intercept(ActionInvocation ai) {
  if (isLogin()) {
    ai.invoke()
  }
  else {
    String actionKey = ai.getActionKey();
    // 跳转到显示登录页面所在的 action
    redirect("/login?from=" + actionKey);
  }
}

2:在显示登录页面的 action 中将 from 这个参数传递给页面显示

public void login() {
  setAttr("from", getPara("from"));
  render(登录页面);
}

3:在页面的 from 表单中将 from 当做参数一起提交

<from action="/doLogin?from=${from}" method="POST">
  <input ...>
  <input ...>
</form>


上面是将 from 用问号挂参的形传递的,也可以用表单隐藏域的方式传递过去

4:在登录 action 中执行登录成功以后,通过 from 参数的值,决定跳转到哪里去,从而实现了,从哪来跳到哪里去的功能

public void doLogin() {
  // 登录操作代码省略
  ......
  String from = getPara("from");
  if (StrKit.notBlank(from))
    redirect(from);
  else
    redirect(首页);
}


0
Gillian_Male
Gillian_Male
我发表一下愚见(我没用过JFinal),每次的request请求都是独立的,所以要跳回原来的页面,有两种可能,第一,找一个比request的scope要大的去存储;2,由request存在cooike里面,3,存储在一个缓存服务器里面。
0
错觉
错觉

这个写的太简单了 ,包含参数就处理不了

String actionKey = ai.getActionKey();
    // 跳转到显示登录页面所在的 action

    redirect("/login?from="+ actionKey);

actionKey这个是访问url,当链接中有参数就不行

返回顶部
顶部