我在这里经历了一个类似的问题.但我还不清楚概念.这是我的情景......
我的客户端(移动设备应用程序)有一个登录屏幕,用于输入用户名,密码.提交后,他应该看到数据库中的书籍列表以及该用户订阅的书籍列表.
我有/ LoginService接受用户名,密码并检查mysql数据库以进行凭证验证.只有在授权之后....我有一个/ BookService; GET上返回数据库中的所有书籍.
我应该在登录服务上使用GET,POST或PUT吗?由于登录请求是只读操作,我应该使用GET - 但这对浏览器来说听起来很愚蠢(因为提交的数据是可见的).
什么是accesstokens(在上面的链接答案中提到),以及如何使用Java生成它们?我正在使用Jersey进行开发.它们是一种安全的授权方式吗?
谢谢 !
据我所知,您正在尝试在客户端和服务器之间实现完美的通信.因此,您首先请求登录,然后使用某种令牌进行进一步的请求.
一般来说,我可以建议你进行无状态沟通.这意味着,您对每个请求进行身份验证和授权.在这种情况下,您不需要LoginRestService.这里的重点是:
BooksService有AuthAdvice(你应该自己写).建议您以某种方式访问(使用Jersey功能)HTTP请求,从中获取相应的标头,对用户进行身份验证和授权(从数据库加载),ThreadLocal如果需要,将用户置于其中(以便其他应用可用)如果凭据有问题,只需调用相应的方法或抛出异常.AuthHendler并将其放入请求预处理管道中.在这个处理程序中,你需要与in完全相同AuthAdvice现在,您的每个请求都会在到达时进行身份验证和授权BooksService.通常,无状态实现对于可伸缩性来说要好得多.
如果你想以有条不紊的方式,那么你可以使用HttpSession.LoginService.login()应该是POST请求,因为您实际上在服务器上产生了一些副作用.服务将根据提供的用户名和密码执行用户身份验证,并将加载的User对象放入会话.此时,将创建服务器端会话,并且客户端在cookie中具有会话ID.因此,进一步的请求应自动将其发送到服务器.为了授权BooksService你的请求仍然需要某种Handler建议(参见无状态解决方案).唯一的区别是:这次用户是从HttpSession(您应该检查您已登录!).
更新:并使用HTTPS!:)
| 归档时间: |
|
| 查看次数: |
7731 次 |
| 最近记录: |