【发布时间】:2012-11-05 16:41:58
【问题描述】:
我正在尝试在我的 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 做的唯一方法。
【问题讨论】:
-
我不确定您所说的 web.xml 文件是如何工作的,但如果它所做的只是检查会话并在会话过期时重定向,您能否在有问题的页面?
-
我不想编写自己的逻辑来检查身份验证/会话过期,我想使用 Web 容器中 Web 应用程序可用的内容
-
您使用的是 Servlet 3.0 吗?史前 J2EE 教程链接和 Weblogic 标记不建议这样做,只是要求确定,因为使用 Servlet 3.0 中的新 API 工具可以做到这一点。否则,您将需要回退到特定于容器的黑客/解决方法(不幸的是,我认为很难得到 Weblogic 的答案,因为社区对这个闭源容器的支持非常低;您最有可能得到的最好的自制认证或采用更灵活的认证框架,如 Spring Security 或 Apache Shiro)。
-
我使用的 Weblogic 10.3.3 仅支持 Servlet 2.5。
-
罗曼,我不知道。我不做春天。 @Tolis:webapp 注册的过滤器(出于明显的安全原因)不在
j_security_check上调用。j_security_check上的请求完全在 servlet 容器内部进行处理和转发,然后请求到达 web 应用程序。
标签: javascript ajax jsp web-applications weblogic