gpt4 book ai didi

rest - 如何将基本 HTTP 身份验证与 REST Web 服务 (Java+Jersey) 结合使用?

转载 作者:行者123 更新时间:2023-12-03 01:30:43 25 4
gpt4 key购买 nike

我是 REST Web 服务的新手,刚刚创建了我的第一个 Web 服务。
在我的服务中,用户可以通过简单的表单创建个人资料,并提供他想要的用户名和密码。

现在如何在用户登录时检查用户凭据?
我的意思是我有一个简单的表单来验证用户是否已登录,但是当用户执行添加/更新/删除的各种配置文件操作时如何验证用户??

例如:
在 FB 中,您登录后,它会存储一个包含您凭据的 cookie,当您执行“发布状态”、向 friend 发送消息等操作时,它不再要求您提供凭据,因为它有一个 cookie其中包含您的凭据,并且它只使用该 cookie...

但是在 REST 中我们不使用 cookie,因此下一个选项是 HTTP header 。我想知道如何通过 HTTP header 发送和接收用户凭据。即
基本 HTTP 身份验证

最佳答案

客户端

要将凭据发送到 API,您可以使用 HTTP Authorization header ,以 Basic username:password 的形式指定凭据。用户名:密码字符串必须使用名为 Base64 的编码方案进行编码。因此,示例 header 可能如下所示:

Authorization: Basic d2lraTpwZWRpYQ==

由于其余规范规定客户端-服务器通信应该是无状态的,因此您必须在每个请求中包含带有凭据的 header 。通常,您将在客户端使用 session cookie 来识别用户,这样他就不必在每个请求中输入其凭据。

服务器端

要检查 Jersey REST 服务内的凭据,您需要捕获并拦截所有传入请求。 Jersey 提供了一个名为 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接口(interface)并重写public ContainerRequest filter(ContainerRequest request)方法。在该方法中,您基本上将执行以下操作:

  • 从请求的 Authorization header 中获取 Base64 编码的凭据
  • 对它们进行解码(即使用 javax.xml.bind.DatatypeConverter.parseBase64Binary())
  • 使用您的 UserDao(或其他数据源提供商)检查凭据是否有效
  • 如果验证失败,则返回状态代码 401 Unauthorized(即抛出 new WebApplicationException(Status.UNAUTHORIZED))
  • 如果凭据有效,只需返回请求即可将其委托(delegate)给负责处理该请求的 Jersey 资源

您可以在this中找到一个很好的例子博客文章。

关于rest - 如何将基本 HTTP 身份验证与 REST Web 服务 (Java+Jersey) 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17487895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com