如何使用 jersey 2.19 REST API 管理 client/server 会话数据
How to manage client/server session data using jersey 2.19 REST API
我是 REST 的新手,正在尝试解决让用户访问 REST API 数据的问题
我有一个应用程序,其中用户根据其用户 ID 对他们可以看到的内容拥有有限的权限。
我通过类似于下面的方法来做到这一点:
@Component
public class StudentsResource{
@Path("students")
@GET
@Produces(MediaType.APPLICATION_JSON_VALUE)
public Students getStudents(@Context HttpServletRequest request){
final HttpSession session = request.getSession();
User user = (User) session.getAttribute(RestConstants.USER);
if(user == null){
throw new NotLoggedInException(RestConstants.USER_NOT_LOGGED_IN);
}
Students students = new Students();
return students;
}
}
如果我登录到应用程序,然后将 REST URL 的 URL 粘贴到浏览器 localhost:8080/api/students
我得到 JSON 响应 /students
.如果我没有先登录到应用程序,而只是在浏览器中导航到 URL localhost:8080/api/students
,我会收到错误消息,指出我没有被授权,因为我没有登录到应用程序。 (这样就可以如我所愿了)
但是,如果我在使用 client
代码调用 API 的应用程序中构建网页,按下按钮将 运行:
String restURL = "http://localhost:8080/localhost:8080/api/students";
final RestTemplate rest = new RestTemplate();
Students response = rest.getForObject(restURL,Students.class);
然后我登录到应用程序,并通过按下按钮 运行 上面的代码(而不是仅仅导航到浏览器中的 URL),我得到一个错误,我不是已登录,所以我没有权限查看数据。
经过进一步调查,我发现这是因为我在 server
端代码中获得的会话在按下client
端,但在浏览器中导航到 URL 时它具有正确的 user
。
为什么当我登录时使用 client
代码时这个值是 null
,但它通过导航到 URL?
如何在使用 Client
code/button 时获取正确的 Session
数据以登录 user
?
您可以通过基于token的认证机制实现client/server通信,基本上您所做的就是在用户登录我们的系统后,我们生成一个随机的UUid并将其与userid连接,使用Base64算法对其进行编码并发送它作为令牌返回给客户,
然后从下一个请求开始,用户需要在 header 中发送令牌,形成 header 我们可以识别哪个用户正在访问该服务。
查看下面的 link 了解更多信息,这是一个关于 Jax-Rs 的所有详细信息的好博客
https://abhirockzz.wordpress.com/
我是 REST 的新手,正在尝试解决让用户访问 REST API 数据的问题
我有一个应用程序,其中用户根据其用户 ID 对他们可以看到的内容拥有有限的权限。 我通过类似于下面的方法来做到这一点:
@Component
public class StudentsResource{
@Path("students")
@GET
@Produces(MediaType.APPLICATION_JSON_VALUE)
public Students getStudents(@Context HttpServletRequest request){
final HttpSession session = request.getSession();
User user = (User) session.getAttribute(RestConstants.USER);
if(user == null){
throw new NotLoggedInException(RestConstants.USER_NOT_LOGGED_IN);
}
Students students = new Students();
return students;
}
}
如果我登录到应用程序,然后将 REST URL 的 URL 粘贴到浏览器 localhost:8080/api/students
我得到 JSON 响应 /students
.如果我没有先登录到应用程序,而只是在浏览器中导航到 URL localhost:8080/api/students
,我会收到错误消息,指出我没有被授权,因为我没有登录到应用程序。 (这样就可以如我所愿了)
但是,如果我在使用 client
代码调用 API 的应用程序中构建网页,按下按钮将 运行:
String restURL = "http://localhost:8080/localhost:8080/api/students";
final RestTemplate rest = new RestTemplate();
Students response = rest.getForObject(restURL,Students.class);
然后我登录到应用程序,并通过按下按钮 运行 上面的代码(而不是仅仅导航到浏览器中的 URL),我得到一个错误,我不是已登录,所以我没有权限查看数据。
经过进一步调查,我发现这是因为我在 server
端代码中获得的会话在按下client
端,但在浏览器中导航到 URL 时它具有正确的 user
。
为什么当我登录时使用 client
代码时这个值是 null
,但它通过导航到 URL?
如何在使用 Client
code/button 时获取正确的 Session
数据以登录 user
?
您可以通过基于token的认证机制实现client/server通信,基本上您所做的就是在用户登录我们的系统后,我们生成一个随机的UUid并将其与userid连接,使用Base64算法对其进行编码并发送它作为令牌返回给客户,
然后从下一个请求开始,用户需要在 header 中发送令牌,形成 header 我们可以识别哪个用户正在访问该服务。
查看下面的 link 了解更多信息,这是一个关于 Jax-Rs 的所有详细信息的好博客
https://abhirockzz.wordpress.com/