我是REST网络服务的新手,刚刚创建了我的第一个网络服务 在我的服务中,用户可以通过简单的表单创建配置文件,提供他想要的用户名和密码。
现在如何在用户登录时检查用户凭据? 我的意思是我有一个简单的表单,用于验证用户是否已登录但如何验证用户何时执行添加/更新/删除的各种配置文件操作?
例如:
在FB中,您登录并存储一个具有您的凭据的cookie,当您执行“发布状态”等操作时,向朋友发送消息......等等...它不再要求您的凭据,因为它有一个cookie您的凭据在那里,它只使用该cookie ...
但是在REST中我们不使用cookie,所以下一个选项是HTTP头。
我想知道如何通过HTTP标头发送和接收用户凭据.i.e
Basic HTTP Auth
答案 0 :(得分:29)
客户端
要将凭据发送到API,请使用HTTP Authorization
标头,以Basic username:password
的形式指定凭据。 username: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
接口并覆盖public ContainerRequest filter(ContainerRequest request)
方法。在方法内部,您基本上将执行以下操作:
javax.xml.bind.DatatypeConverter.parseBase64Binary()
)401 Unauthorized
您可以在this博文中找到一个很好的例子。