处理客户端上的身份验证错误

时间:2013-04-15 09:30:33

标签: rest authentication backbone.js jersey dropwizard

目前我们正在开发一个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) 

但这需要例如在服务器端过滤器中对登录页面网址进行硬编码,并且通常将一些逻辑绑定到服务器端代码中。

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

1 个答案:

答案 0 :(得分:0)

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

希望它有所帮助。

再见,皮耶罗

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

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