我是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
中,我将获得/students
的JSON响应。如果我没有先登录应用程序,而只是导航到浏览器中的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
边码中的会话已登录null
user
{1}}方面,但在导航到浏览器中的网址时,它具有正确的client
。
为什么在我登录时使用user
代码时此值为null
,但它是否可以导航到该网址?
使用client
代码/按钮时,如何获取正确的Session
数据以登录user
?
答案 0 :(得分:0)
您可以通过基于令牌的身份验证机制实现客户端/服务器通信,基本上您所做的就是在用户登录我们的系统后,生成随机UUid并将其与userid连接,使用Base64算法对其进行编码并将其发送回客户端作为代币,
然后从下一个请求开始,用户需要在标头中发送令牌,形成标头我们可以识别哪个用户正在访问该服务。
有关更多信息,请点击以下链接,它是关于Jax-Rs的所有详细信息的好博客
https://abhirockzz.wordpress.com/