当前位置: 首页 > 面试题库 >

登录后重定向回页面

燕飞文
2023-03-14
问题内容

我正在做一个简单的论坛,由一系列论坛组成Servlets,每个论坛分别代表首页,主题,postitit,登录名和用户列表页面。在某些页面上,当用户未登录时会出现一个链接。

我想要实现的是在登录后触发重定向(在RequestDispatcher上使用forward()),以便浏览器返回到用户在单击登录链接之前所在的页面。为此,我看到了两种解决方案。

第一种解决方案是Form使用带有登录按钮的HTML
和一个不可见字段,该字段将包含信息,该信息将说明要重定向到哪个页面Parameter。这是可行的,但我想尝试其他方法。

第二种解决方案是将添加Attributesession代表第一个“页”以某种方式。它可以包含一个String,但这与第一种方法没有什么不同。另一个方法是添加对HttpServlet的引用,并使用instanceof或可用于以某种方式标识Servlet的静态String变量。但是,这将需要为所有都创建一个共同的祖先类Servlets

也许您可以看到还有一个简单的解决方案,可以构成一个很好的折衷方案?或者,也许上述解决方案之一是完全可以接受的?


问题答案:

我更喜欢第一种而不是第二种解决方案。这是 请求 范围的信息,实际上不属于会话,只会导致“ wtf”?在同一会话中打开多个窗口/选项卡时的使用体验。

在登录页面的链接上,只需将当前URL作为请求参数传递:

<a href="/login?from=${pageContext.request.requestURI}">Login</a>

或者,如果它是登录页面的POST表单:

<input type="hidden" name="from" value="${pageContext.request.requestURI}">

在登录表单中,将其作为隐藏变量传输到下一个请求

<input type="hidden" name="from" value="${param.from}">

在登录servlet中,使用它:

User user = userDAO.find(username, password);
if (user != null) {
    request.getSession().setAttribute("user", user);
    response.sendRedirect(request.getParameter("from"));
} else {
    // Show error.
}

很简单,不是吗?:)

有些人可能建议request.getHeader("referer")在登录表单中而不是request.getRequestURI()在链接/按钮之前使用它,但是我不会这样做,因为这是受客户端控制的,并不总是返回可靠的信息。一些客户端已禁用它,或正在使用某些用无效值对其进行欺骗的软件,例如大多数(
咳嗽 )Symantec产品。



 类似资料:
  • 记录器文件中的日志- org.springframework.Security.Access.event.loggerlistener-安全授权失败,原因是:org.springframework.Security.Access.accessdeniedexception:访问被拒绝;通过身份验证的主体:org.springframework.security.authentication.ano

  • 我在Laravel5.2中使用了php artisan函数。 我想重定向的客人登录页面,若客人点击链接,只有用户并没有客人。 我想在登录后将用户重定向到后面的页面。 我怎么能这么做?请详细展示一些文件名示例。 ///////编辑 路线 控制器 Kernel.php

  • 我有一个页面,上面有一些内容和评论部分。评论只能由已登录的用户留下,因此我在页面中添加了一个登录表单供用户登录(仅当用户尚未登录时显示)。 我的问题是,当用户登录时,他们会被重定向回主页,而不是他们以前所在的页面。 我没有更改开箱即用设置的登录方法。 任何人都可以建议一个简单的方法来设置重定向url。我的想法是,能够将其设置为表单会很好。

  • 我有一个文件,带有一个,具有和字段,在上,它用

  • 我正在开发一个应用程序,它允许用户浏览网站并从任何页面登录(登录链接位于公共标题中)。成功登录后,用户当前将从登录页面重定向到根url。 redirect_to原始页面会更友好。我试图将原始页面的命名路由存储到会话中,但这些似乎是对象,因此无法通过。此外,并非所有路由都带有指定的助手。另一方面,当我将文字路径作为字符串传递给redirect_to时,例如“订单/索引”,Rails将 /action

  • 我正在尝试使用Oauth2代理作为使用Google身份验证的网站的网关。出现Oauth登录页面,您可以单击“登录”,这将带您进入Google登录页面,但登录后它会直接重定向回Oauth登录页面。我怀疑这与cookie有关,但我不知道我做错了什么。 NGINX配置: oauth 2-代理配置: Oauth2-proxy 启动命令: 任何想法将不胜感激!