1

目前我们正在开发一个 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 进行硬编码,并且通常将一些逻辑绑定到服务器端代码中。

我确信有更好的方法来处理客户端的服务器身份验证错误,我想了解它们。

4

1 回答 1

0

为什么不使用 Dropwizard 内置的身份验证[1]?如邮件列表[2] 中所述,您可以编写自己的 BasicAuthProvider,然后您可以在其中访问 HttpContext。

希望能帮助到你。

再见,皮耶罗

[1] http://dropwizard.codahale.com/manual/auth/

[2] https://groups.google.com/d/msg/dropwizard-user/NyvxbefQ1FE/vexCdTHdFuYJ

于 2013-07-19T15:58:10.053 回答