Javascript Ajax与表单认证
我试图在ajax应用程序中实现表单身份验证。 我遇到的问题是,当会话到期时,我会收到302代码,该代码会将我重定向到我在web.xml中指定的登录页面(它会把所有事情都搞糟,将整个应用程序刷新到登录页面) 我想做的是获得一个“未验证”(401)代码,然后在弹出窗口中显示登录表单,当登录成功时,继续我正在做的事情 下面是正在发生的事情的图片: 医生呢 基本上,我希望显示弹出窗口,而不是重定向到登录页面,然后不重定向到资源,而是以AJAX方式进行更新。 据我所知,由于无法避免重定向,因此无法仅在客户端执行此操作(请参见此处:),我需要在服务器上编写某种逻辑以防止重定向,请参见此处了解有关在IIS中执行此操作的详细信息:Javascript Ajax与表单认证,javascript,ajax,jsp,web-applications,weblogic,Javascript,Ajax,Jsp,Web Applications,Weblogic,我试图在ajax应用程序中实现表单身份验证。 我遇到的问题是,当会话到期时,我会收到302代码,该代码会将我重定向到我在web.xml中指定的登录页面(它会把所有事情都搞糟,将整个应用程序刷新到登录页面) 我想做的是获得一个“未验证”(401)代码,然后在弹出窗口中显示登录表单,当登录成功时,继续我正在做的事情 下面是正在发生的事情的图片: 医生呢 基本上,我希望显示弹出窗口,而不是重定向到登录页面,然后不重定向到资源,而是以AJAX方式进行更新。 据我所知,由于无法避免重定向,因此无法仅在
到目前为止,这似乎是最有希望的实现方法。该类已被弃用,但我找不到新类,并且认为这是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内部进行处理和转发。我认为我的服务器端代码不会在会话过期后运行,因此我无法检查代码中的任何内容或设置状态。哦,是的。我需要任何技术工作完成后,让我们要么重写超时行为,要么订阅会话超时事件。但如果我经常这样做,心跳会延长会话。我可能会做一个“测试”在每次提交之前发送消息,不确定这是最好的方法。不是完整的答案,但我想这是唯一明智的方法,我将研究如何实现它,谢谢!