在我的服务中,用户可以通过简单的形式创建个人资料,提供所需的用户名和密码.
现在如何在用户登录时检查用户凭据?
我的意思是我有一个简单的表单验证用户已经登录,但如何验证用户何时执行各种配置文件操作的添加/更新/删除?
例如:
在FB中,您登录并存储具有凭证的Cookie,当您执行“发布状态”操作时,发送一个朋友…等等,它不再要求您的凭据,因为它有一个cookie其中您的凭据在那里,它只是使用该cookie …
但是在REST中,我们不使用cookie,因此下一个选项是HTTP头.
而且我想知道如何通过HTTP头发送和接收用户凭据
基本的HTTP认证
要将凭据发送到API,请使用HTTP授权标头,以基本用户名:password的形式指定凭据.用户名:password字符串必须使用称为Base64的编码方案进行编码.因此,示例头可能如下所示:
Authorization: Basic d2lraTpwZWRpYQ==
由于其余规范规定客户端 – 服务器通信应该是无状态的,所以必须在每个请求上包含带有凭据的头文件.通常,您将在客户端使用会话cookie来识别用户,以便他不必在每个请求上输入凭据.
服务器端
要检查Jersey REST服务中的凭据,您需要捕获并拦截所有传入的请求.泽西提供了一个名为ContainerRequestFilters的概念.例如,如果您使用Tomcat,您可以在web.xml中的servlet定义中添加此类型的过滤器,如下所示:
<init-param> <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> <param-value>your.package.BasicAuthFilter</param-value> </init-param>
引用的BasicAuthFilter类需要实现Jerseys ContainerRequestFilter接口并覆盖公共ContainerRequest过滤器(ContainerRequest request)方法.在这个方法里面,你将基本做以下事情:
>从请求的授权头获取Base64编码的凭证
解码它们(即使用javax.xml.bind.DatatypeConverter.parseBase64Binary())
>使用您的UserDao(或其他数据源提供程序)来检查凭据是否有效
>返回状态代码401如果验证失败,则未经授权(即抛出新的WebApplicationException(Status.UNAUTHORIZED))
>如果凭据有效,只需返回请求,将其委托给负责处理它的泽西资源
您可以在this博客文章中找到一个很好的例子.