0

我使用 Spring Security 保护了我的其余 Web 服务。我正在通过各种处理程序返回适当的响应(401 表示失败,200 表示成功等)。客户端不想将凭据存储在设备上,因此我无法通过在每个请求的标头中传递凭据来进行真正的 restful per-request 身份验证。因此,我正在尝试使用 Remember-me 设置持久令牌方法。

我已经设置好 db 表并且能够登录。登录在我的数据库的 persistent_logins 表中创建一行,其中包含系列和令牌值。

我的问题是双重的:

  1. 我需要在我的 successHandler 类中添加什么来向用户返回 200 响应以返回令牌(我是否也需要系列值?)?
  2. 通过 curl 进行测试时,如何在标头中设置此标记?

这是我的 successHandler 类:

public class RestAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler{

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                    Authentication authentication) throws ServletException, IOException {
    response.setStatus(HttpServletResponse.SC_OK);
    clearAuthenticationAttributes(request);
}
}  

提前感谢您的任何帮助!

4

1 回答 1

2

PersistentTokenBasedRememberMeServices确保在SPRING_SECURITY_REMEMBER_ME_COOKIE包含编码的系列和令牌值的响应(默认情况下)上设置一个 cookie,因此您不需要身份验证成功处理程序中的任何额外代码。使用 curl 进行测试时,只需将这个 cookie 发回即可。

如果在响应中没有看到这个cookie,请检查登录请求中是否包含_spring_security_remember_me=true表示客户端实际请求remember-me功能的参数,或者默认配置which的alwaysRemember属性PersistentTokenBasedRememberMeServices为false。

于 2013-02-22T13:08:48.407 回答