如何使用jersey 2.19 REST API管理客户端/服务器会话数据

时间:2016-05-24 14:34:33

标签: java rest session jersey-2.0 jersey-client

我是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

1 个答案:

答案 0 :(得分:0)

您可以通过基于令牌的身份验证机制实现客户端/服务器通信,基本上您所做的就是在用户登录我们的系统后,生成随机UUid并将其与userid连接,使用Base64算法对其进行编码并将其发送回客户端作为代币,


 然后从下一个请求开始,用户需要在标头中发送令牌,形成标头我们可以识别哪个用户正在访问该服务。

有关更多信息,请点击以下链接,它是关于Jax-Rs的所有详细信息的好博客
https://abhirockzz.wordpress.com/