Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax与表单认证_Javascript_Ajax_Jsp_Web Applications_Weblogic - Fatal编程技术网

Javascript Ajax与表单认证

Javascript Ajax与表单认证,javascript,ajax,jsp,web-applications,weblogic,Javascript,Ajax,Jsp,Web Applications,Weblogic,我试图在ajax应用程序中实现表单身份验证。 我遇到的问题是,当会话到期时,我会收到302代码,该代码会将我重定向到我在web.xml中指定的登录页面(它会把所有事情都搞糟,将整个应用程序刷新到登录页面) 我想做的是获得一个“未验证”(401)代码,然后在弹出窗口中显示登录表单,当登录成功时,继续我正在做的事情 下面是正在发生的事情的图片: 医生呢 基本上,我希望显示弹出窗口,而不是重定向到登录页面,然后不重定向到资源,而是以AJAX方式进行更新。 据我所知,由于无法避免重定向,因此无法仅在

我试图在ajax应用程序中实现表单身份验证。 我遇到的问题是,当会话到期时,我会收到302代码,该代码会将我重定向到我在web.xml中指定的登录页面(它会把所有事情都搞糟,将整个应用程序刷新到登录页面)

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

下面是正在发生的事情的图片:

医生呢

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


到目前为止,这似乎是最有希望的实现方法。该类已被弃用,但我找不到新类,并且认为这是Weblogic实现该类的唯一方法。

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

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

用户单击提交按钮

ajax请求被发送到服务器

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

这个401可以在客户端使用ajax--xhr.status进行检查

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

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

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


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

您可以使用心跳检查,通过ajax请求将服务器发送到需要进行身份验证的任何资源。。如果您无法接收此资源,则表示您未登录。。因此,您可以发送另一个身份验证请求以继续渲染

请看这篇文章


因此,您的身份验证检查例行程序将被实现

您需要推到页面,而不是轮询。因此,您需要连接Strophe和会话处理程序。当会话到期时,信号被发送到在您的web应用程序中运行的Strophe实例,之后很容易进行弹出或其他操作。 对于所有实时的东西,我都在使用Strophe

这是,这也是php的链接

这将需要你花上几天的时间来解决这个问题,但这几天花得很好!
如果您仔细阅读本书并阅读示例,只要对javascript/jquery有基本的了解,就可以开发功能强大的web应用。

您可能需要使用servlet身份验证过滤器,如
中所述

以下教程可能对您有所帮助:



我知道您正在尝试使用ajax应用程序进行表单身份验证,但是否确实需要它


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

我不确定您所说的web.xml文件是如何工作的,但如果它所做的只是检查会话并在会话过期时重定向,您能不能在有问题的页面上手动编写该逻辑?我不想编写自己的逻辑来检查身份验证/会话过期,我想使用web容器中可用于web应用程序的内容您是否使用Servlet 3.0?史前J2EE教程链接和Weblogic标记建议不要这样做,而只是要求确保,因为这可以使用Servlet3.0中的新API工具实现。否则,您需要退回到特定于容器的hack/workarounds(不幸的是,我认为很难找到Weblogic的答案,因为社区对这个封闭源代码容器的支持非常低;你能得到的最好的答案很可能是homebrewing身份验证或采用更灵活的身份验证框架,如Spring Security或Apache Shiro)。我正在使用Weblogic 10.3.3,它只支持Servlet 2.5。罗曼,我不知道。我不使用Spring。@托利斯:webapp注册的过滤器是(出于明显的安全原因)未在
j_security_check
上调用。在请求到达Web应用程序之前,
j_security_check
上的请求完全在servletcontainer内部进行处理和转发。我认为我的服务器端代码不会在会话过期后运行,因此我无法检查代码中的任何内容或设置状态。哦,是的。我需要任何技术工作完成后,让我们要么重写超时行为,要么订阅会话超时事件。但如果我经常这样做,心跳会延长会话。我可能会做一个“测试”在每次提交之前发送消息,不确定这是最好的方法。不是完整的答案,但我想这是唯一明智的方法,我将研究如何实现它,谢谢!