Java 如何在客户端进行REST身份验证后获取用户信息?

Java 如何在客户端进行REST身份验证后获取用户信息?,java,angularjs,spring,rest,spring-rest,Java,Angularjs,Spring,Rest,Spring Rest,我有弹簧休息后端和角前端 身份验证使用POST请求“/login”URL执行,请求JSON正文中包含用户名和密码(我使用基于表单的身份验证)。 REST后端用OK代码回复。一切正常,我可以从前端执行其他需要身份验证的请求 但是前端需要知道经过身份验证的用户的角色是什么,以便它能够为其显示适当的视图/记录。我们从哪里可以在前端得到这个角色?我们从身份验证中得到的唯一响应是OK,对于REST来说这很好 我们可以通过对“/users/[user_id]”执行get请求来获取用户信息。但我们没有用户id

我有弹簧休息后端和角前端

身份验证使用POST请求“/login”URL执行,请求JSON正文中包含用户名和密码(我使用基于表单的身份验证)。 REST后端用OK代码回复。一切正常,我可以从前端执行其他需要身份验证的请求

但是前端需要知道经过身份验证的用户的角色是什么,以便它能够为其显示适当的视图/记录。我们从哪里可以在前端得到这个角色?我们从身份验证中得到的唯一响应是OK,对于REST来说这很好

我们可以通过对“/users/[user_id]”执行get请求来获取用户信息。但我们没有用户id,只有用户名

所以问题是-REST从只有用户名的前端获取角色(或其他用户信息)的正确方法是什么?


作为一种解决方法,我可以在后端创建新的请求,该请求采用用户名而不是id,或者我可以将用户id添加到身份验证响应中。但从REST的角度来看,我并不确定这是一种正确的方法。

您不能重写HTTP方法。因此,如果您计划使用相同路径的不同查询参数编写GET调用,那么这是不允许的。您需要编写两个GET路径

e、 g

获取/users/userid/{id} 获取/users/username/{name}


在第二次调用中,您可以添加所需的逻辑,以便在第二次调用中获取角色。

您不能覆盖HTTP方法。因此,如果您计划使用相同路径的不同查询参数编写GET调用,则不允许。您需要编写两个GET路径

e、 g

获取/users/userid/{id} 获取/users/username/{name}


在第二次调用中,您可以为在第二次调用中获得角色添加所需的逻辑。

有两种方法

1) 从服务器成功进行身份验证后,再使用用户名对服务器执行一次
$http
调用,您可以从服务器逻辑中获取详细信息,该逻辑将获取并存储结果到
$rootScope
。此信息将在整个应用程序中提供

2) 在对用户进行身份验证时,如果用户有效,则获取其详细信息并将其存储在对象中

现在,在服务器逻辑中,当返回响应时,您可以执行以下操作

response.setHeaders("User",userDetilsObj);
注意:响应是一个HttpServletResponse对象

如您所说,请求完成后,我们将得到状态为200的OK响应。要访问JS端的用户详细信息,请遵循以下代码

if(response.status == '200/OK'){
   $rootScope.user = response.getHeaders().User;//In this object all the user details set at server side are available now..
}

希望这能让你了解如何达到你想要的结果。

有两种方法

1) 从服务器成功进行身份验证后,再使用用户名对服务器执行一次
$http
调用,您可以从服务器逻辑中获取详细信息,该逻辑将获取并存储结果到
$rootScope
。此信息将在整个应用程序中提供

2) 在对用户进行身份验证时,如果用户有效,则获取其详细信息并将其存储在对象中

现在,在服务器逻辑中,当返回响应时,您可以执行以下操作

response.setHeaders("User",userDetilsObj);
注意:响应是一个HttpServletResponse对象

如您所说,请求完成后,我们将得到状态为200的OK响应。要访问JS端的用户详细信息,请遵循以下代码

if(response.status == '200/OK'){
   $rootScope.user = response.getHeaders().User;//In this object all the user details set at server side are available now..
}

希望这能让您了解如何实现所需的结果。

在验证用户时从服务器获取用户信息。在成功验证用户时传递用户详细信息。

在验证用户时从服务器获取用户信息。在成功验证时传递用户详细信息用户身份验证。

在评论中与@jbniset讨论问题后,我决定将REST端点从“/users/:user\u id”更改为“/users/:user\u name”。

在评论中与@jbniset讨论问题后,我决定将REST端点从“/users/:user\u id”更改为“/users/:user\u name”.

如果后端需要传递用户ID以获取当前用户信息,但不允许获取用户ID,则后端存在严重的设计问题。您似乎能够发送需要身份验证的请求。这意味着后端能够识别您是谁(可能要感谢cookie)。如果这是真的,您不需要将任何内容作为参数传递,因为它是在cookie中隐式传递的。你可以有一个/当前用户资源。后端和前端都在我的开发中。在REST之后,后端提供用户信息的正确方法是什么?我刚刚告诉过你。假设后端有一种隐式的方法来识别请求(例如,使用cookie),那么您可以只提供一个/当前用户、一个/我或任何您想命名的资源。例如,从REST的角度看,这样做可以吗?我不确定“发布/当前用户”或“删除/当前用户”是什么意思。如果用户名是用户的唯一标识符,则是。你的理解是错误的。如果资源是只读的,那么为该资源提供DELETE和POST方法是没有意义的。您是否注意到github api使用just/user获取经过身份验证的用户?如果您的后端需要传递用户ID以获取当前用户信息,但不允许获取用户ID,则后端存在严重的设计问题。您似乎能够发送需要身份验证的请求。这意味着后端能够识别您是谁(可能要感谢cookie)。如果这是真的,您不需要将任何内容作为参数传递,因为它是在cookie中隐式传递的。你可以有一个/当前用户资源。后端和前端都在我的开发中。在REST之后,后端提供用户信息的正确方法是什么?我刚刚告诉过你。假设后端有一种隐式的方法来识别r