我正在尝试在ajax应用程序中实现表单身份验证。我的问题是,当会话到期时,我会得到302代码,它会将我重定向到我在web.xml中指定的登录页面(它会弄乱一切,刷新整个应用程序的登录页面)。
我想要做的是得到一个“未认证”(401)代码,然后在一个弹出窗口中显示登录表单,当登录成功时,继续我正在做的事情。
这是一张正在发生的事情的图片:

和文档的http://docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html
基本上,我想显示弹出窗口,而不是重定向到登录页面,然后不做重定向到资源,但在AJAX方式做我的更新。据我所知,这不能只在客户端完成,因为无法避免重定向(请参阅此处:redirect info),我需要在服务器上编写某种类型的逻辑来防止重定向,有关在IIS:IIS implementation中执行此操作的详细信息,请参阅此处
附注:到目前为止:http://www.oracle.com/technetwork/articles/entarch/session-lifecycle-096133.html看起来是实现它的最有前途的方法。这个类被弃用了,但我找不到新的类,并且认为这是Weblogic的唯一方法。
发布于 2012-11-21 21:15:43
这不是一种简单的方法,但仍然有效。
您的页面中有一个由用户填写的表单。
用户单击提交按钮。
ajax请求被发送到服务器。
服务器端实现可以检查会话是否存在。相应地,您可以发送响应码401..(response.setStatus());
可以使用ajax在客户端检查这个401 - xhr.status
如果响应是401,您可以显示登录表单并隐藏当前表单。使用js和css。
用户填写登录详细信息,然后单击提交。
您可以对该登录请求的状态执行相同的服务器端检查和客户端检查。
如果登录成功,则可以使用ajax或js提交第一个表单。
发布于 2012-11-26 21:00:57
您可能需要使用weblogic.xml Deployment Descriptor Elements中所述的servlet身份验证过滤器
以下教程可能会对您有所帮助:
oracle Servlet Authentication Filters
Using servlet filters for user authentication
Writing Servlet Filters
发布于 2012-11-25 00:09:08
您可以对服务器的ajax请求使用心跳检查,该请求指向需要进行身份验证才能获得它的任何资源。如果您无法收到此资源,则表示您尚未登录。因此,您可以发送另一个身份验证请求,然后继续渲染。
请参阅这篇文章。http://ajaxpatterns.org/archive/Heartbeat.php
因此,您的身份验证检查例程将被实现。
https://stackoverflow.com/questions/13425355
复制相似问题