5

我正在尝试在我的 ajax 应用程序中实现表单身份验证。我遇到的问题是,当会话到期时,我得到 302 代码,该代码将我重定向到我在 web.xml 中指定的登录页面(并且将整个应用程序刷新到登录页面时一切都搞砸了)。

我想要做的是获得一个“未通过身份验证”(401)代码,然后在弹出窗口中显示登录表单,当登录成功时继续我正在做的事情。

这是正在发生的事情的图片: http://docs.oracle.com/javaee/1.4/tutorial/doc/images/security-formBasedLogin.gif

和文档 http://docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html

基本上,我想显示弹出窗口而不是重定向到登录页面,然后不重定向到资源,而是以 AJAX 方式进行更新。据我了解,由于无法避免重定向,因此不能仅在客户端完成(请参见此处:重定向信息),我需要在服务器上编写某种逻辑以防止重定向,请参见此处有关在 IIS 中执行此操作的详细信息:IIS 实现

PS 到目前为止:http ://www.oracle.com/technetwork/articles/entarch/session-lifecycle-096133.html看起来是最有希望的实现方式。该类已弃用,但我找不到新的类,并认为这是为 Weblogic 做的唯一方法。

4

5 回答 5

1

这不是一个简单的方法,但它仍然有效

您的页面中有一个由用户填写的表单。

用户点击提交按钮。

一个ajax 请求被发送到服务器。

服务器端实现可以检查会话是否存在。因此您可以发送响应代码 401..(response.setStatus());

可以使用 ajax 在客户端检查此 401 --- xhr.status

如果响应为 401,您可以显示登录表单并隐藏当前表单。使用js和css。

用户填写登录详细信息并单击提交..

您可以对该登录请求的状态进行相同的服务器端检查和客户端检查。

如果登录成功,那么您可以使用 ajax 或 js 提交第一个表单。

于 2012-11-21T13:15:43.160 回答
1

您可能需要使用weblogic.xml 部署描述符元素中描述的 servlet 身份验证过滤器

以下教程可能会对您有所帮助:
oracle Servlet 身份验证过滤器
使用 servlet 过滤器进行用户身份验证
编写 Servlet 过滤器

于 2012-11-26T13:00:57.333 回答
0

您需要送到 page 而不是 poll。所以你需要连接 Strophe 和你的会话处理程序。当会话到期时,信号会发送到在您的 Web 应用程序中运行的 Strophe 实例,之后很容易进行弹出或其他操作。对于所有实时的东西,我正在使用 Strophe!

这是关于这本书的书,这是Strophe 的链接,也是 php xmpp 类的链接。

您需要几天时间才能弄清楚这一点,但是这几天花得很好!如果您仔细阅读书籍并查看示例,只需了解基本的 javascript/jquery,您将能够开发强大的 Web 应用程序。

于 2012-11-24T19:31:24.417 回答
0

您可以使用对您的服务器的 ajax 请求进行心跳检查,以检查任何需要经过身份验证才能获得它的资源。如果您无法接收到此资源,则意味着您没有登录..因此您可以发送另一个身份验证请求继续你的渲染..

看到这篇文章.. http://ajaxpatterns.org/archive/Heartbeat.php

所以你的身份验证检查程序将被实施..

于 2012-11-24T16:09:08.200 回答
-1

我知道您正在尝试对您的 ajax 应用程序进行 FORM 身份验证,但它真的需要吗?

BASIC 身份验证对 ajax 请求更简单、更透明,因为它由浏览器处理,而不是由您的应用程序处理。但我承认/理解弹出窗口很丑陋。

于 2013-04-17T08:36:23.667 回答