gpt4 book ai didi

java - 设计 RESTful 登录服务

转载 作者:行者123 更新时间:2023-12-02 08:16:39 24 4
gpt4 key购买 nike

我遇到了类似的问题here 。但我还不清楚概念。这是我的场景...

我的客户端(移动设备应用程序)有一个登录屏幕,用于输入用户名、密码。提交后,他应该会看到数据库中的图书列表以及该用户订阅的图书列表。

我有一个/LoginService ,它接受用户名、密码并检查 mysql 数据库以进行凭据验证。仅在授权后...我有一个/BookService ; GET 返回数据库中的所有书籍。

  1. 我应该在登录服务上使用 GET、POST 还是 PUT?由于登录请求是只读操作,因此我应该使用 GET - 但这对于浏览器来说听起来很愚蠢(因为提交的数据是可见的)。

  2. 什么是 accesstoken(在上面的链接答案中提到),以及如何使用 Java 生成它们?我正在使用 Jersey 进行开发。它们是一种安全的授权方式吗?

谢谢!

最佳答案

据我了解,您正在尝试在客户端和服务器之间实现 stetefull 通信。因此,您使用第一个请求登录,然后使用某种 token 发出进一步的请求。

一般来说,我可以建议您进行无状态通信。这意味着您对每个请求进行身份验证和授权。在这种情况下,您不需要 LoginRestService。这里的要点是:

  1. 客户端可以通过 HTTP header (非标准,例如用户名:user密码:secret)提供用户名和密码。
  2. 在服务器端您可以使用
    1. 使用 AOP:只需将 BooksServiceAuthAdvice 封装起来(您应该自己编写)。建议您以某种方式访问​​(使用 Jersey 功能)HTTP 请求,从中获取相应的 header ,对用户进行身份验证和授权(从数据库加载),将用户放入 ThreadLocal 中(以便可以使用它)应用程序的其余部分)如果需要,只需调用相应的方法或在凭据出现问题时抛出异常。
    2. 使用 Jersey 功能:(抱歉,我不太熟悉 Jersey,我使用的是 CXF,但从概念上讲它应该是相同的)只需创建某种 AuthHendler 并将其放入请求预处理管道中。在此处理程序中,您需要与 AuthAdvice
    3. 中的内容完全相同

现在,您的每个请求在到达 BooksService 时都会经过身份验证和授权。一般来说,无状态实现对于可扩展性来说要好得多。

如果你想采用有状态的方式,那么你可以使用HttpSessionLoginService.login() 应该是 POST 请求,因为您实际上在服务器上产生了一些副作用。服务将根据提供的用户名和密码对您的用户进行身份验证,并将加载的 User 对象放入 session 中。此时,服务器端 session 已创建,并且客户端在 cookie 中拥有 session ID。因此进一步的请求应该自动发送到服务器。为了授权对 BooksService 的请求,您仍然需要某种处理程序建议(请参阅无状态解决方案)。唯一的区别:这次用户是从 HttpSession 中获取的(您应该检查您是否已登录!)。

更新:并使用HTTPS! :)

关于java - 设计 RESTful 登录服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901945/

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