目前我们正在开发一个 REST 应用程序,在服务器端使用 Dropwizard,在客户端使用 RequireJS、Backbone。
我们的身份验证模型是基于 cookie 的。对于每个请求,Web 过滤器都会检查适当的 cookie 及其值,即令牌。如果令牌仍然有效,它将在过滤器链上转发请求,如果不是,它将以 401 响应。
在客户端,它最终像:
do an ajax request:
success:
render the rest of the content
error: // got 401
stop whatever you were doing and redirect to the login page
这种方法出现的唯一缺陷是客户端首先必须下载实际页面,然后才能重定向到登录页面(当然是在 401 的情况下)。
比如我有两个页面a.html和b.html。如果客户端正在浏览页面a.html并且在一段时间后其令牌过期,首先他需要下载b.html它将在后台执行 ajax 请求(见上文),然后我将能够将其重定向到登录页面:
a.html (200) -> token expired -> b.html (200) -> login.html (200)
到目前为止,我在我们编写的每个 REST 应用程序中都使用了这种错误处理方式。我想看到的是例如:
a.html (200) -> token expired -> login.html (200)
但这需要例如在服务器端过滤器中对登录页面 url 进行硬编码,并且通常将一些逻辑绑定到服务器端代码中。
我确信有更好的方法来处理客户端的服务器身份验证错误,我想了解它们。