如何使用基于表单登录的java Web应用程序通过AJAX处理身份validation

我有一个在WebSphere 7上运行的java Web应用程序。该应用程序使用表单身份validation方法,部分应用程序使用ajax请求访问某些受保护资源。 但是,当用户的会话到期时,我将获取登录页面来代替应该由ajax请求刷新的内容。

有没有办法处理这个问题? WebSphere使用登录页面返回响应状态200,因此我不能依赖它。

也许有办法告诉服务器在某些情况下应该使用基本身份validation,但我不知道如何使用。

我还想过先检查会话是否是新的,首先请求不受保护的资源然后返回某个状态,但它看起来像代码味道解决方案……

这就是我在类似情况下处理它的方式。 在我们的例子中,AJAX响应始终是JSON。 登录过期后,身份validation筛选器始终以HTML格式发送登录表单。 所以我检查这样的内容类型,

if ((this.getHeader('Content-type') || '').include('application/json')) 

如果它不是JSON,我只需重定向到另一个受保护的页面,这将触发全屏登录,然后该页面将引导用户返回到AJAX页面。

当用户会话不是来自WebSphere的Ajax调用时,您可以发回一些唯一的响应或一些错误代码(确保您不会在任何情况下将此错误代码作为有效响应)。 并且在Ajax调用方法中,对进程响应,检查其错误代码。如果是错误代码,将其重定向到登录页面或做任何事情,其他情况将是有效数据。