java - Java 和 Javascript 中的登录页面重定向

标签 java javascript web-services redirect authentication

好的,我有一个有趣的登录页面重定向案例。
我的网络服务有一个登录页面(login.html),其中包含一些 JavaScript 来处理登录并重定向到硬编码的“默认”页面。 Web 服务是用 Java 编写的,带有 Servlet 过滤器,如果用户未经身份验证,则处理重定向(因此,如果用户尝试在未登录的情况下访问 domain/statistics ,他们将被定向到 domain/login .html)。来自 protected 服务的重定向有效:我可以重定向到登录页面,一旦用户通过身份验证,将其重定向到默认页面。但是,我在重定向到上一页时遇到问题。
我知道这通常是通过 Javascript 中的参数 document.referrer 来处理的,我已经尝试过了,但是由于 Java 使用 response.sendRedirect 进行重定向,Referer header 是未发送。

如何让这两个方面重定向到之前调用的页面?我是否需要在 Javascript 端、Java 端或两者上添加一些内容?

最佳答案

我所做的是将原始(重定向)URL 放入登录表单上的隐藏输入字段中。进行身份验证的代码应该只检查该参数,如果它不为空,则可以在建立 session 后重定向。

你必须小心这样做,以防止 XSS 攻击等,但这并不难,而且效果很好。

在我的框架(Stripes)中,我可以将原始 URL(取自 HttpServletRequest 对象,servlet 路径、“路径信息”和查询字符串的组合)推送到一个特殊的保存框中,这将导致框架在下一个请求时将其作为参数返回给我。如果没有这个,最简单的方法就是在重定向时添加 URL 作为参数。只需对原始尝试的 URL 进行 URL 编码,然后使用一些参数名称将其附加到重定向 URL 上。然后,在您的登录页面上,您只需检查它:

    <c:if test='${not empty param.attemptedUrl}'>
      <input type='hidden' name='attemptedUrl' value='${fn:escapeXml(param.attemptedUrl)}'>
    </c:if>

然后,当提交登录表单时,您的登录操作也会获取该参数,并且可以根据需要对其进行操作。

关于java - Java 和 Javascript 中的登录页面重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412428/

相关文章:

php - 如何保护 web 服务,以便只有我的 android 应用程序可以使用我的 web 服务

java - 第一个 Dropwizard 应用程序构建但不执行

java - 如何将 JButtons 置于 BoxLayout 中居中 JLabel 的中心?

javascript - 为什么父元素上的 PreventDefault 会禁用以编程方式检查单击时的子复选框?

javascript - 简单的jquery聊天框

javascript - 是否可以将 ko.computed 继承到原型(prototype)类?

java - 在java中循环通过scala ListBuffer

java - POJO 到 JSON 的转换不适用于以 "is"开头的字符串变量

java - 从hybris平台获取数据

java - 使用角色注释进行保护不起作用( Jersey )