【问题标题】:RestEasy client to secured serviceRestEasy 客户端到安全服务
【发布时间】:2014-10-01 11:31:33
【问题描述】:

我们已经部署了 RestEasy 服务,作为应用程序的一部分,并使用过滤器(实现 javax.servlet.Filter 的类)保护它们。过滤器检查会话中是否存在 User 类的对象。用户登录时将用户对象插入会话中。一切正常。

但是,我们需要创建访问这些服务的独立应用程序。我们决定使用 RestEasy 客户端 API。如果过滤器关闭,我们可以访问这些服务,但是我们如何从 RestEasy 客户端 API 执行登录和会话操作。

【问题讨论】:

  • 我不明白您的设置 - 应用程序有一些面向客户端的 javascript 代码可以调用的 REST 端点?现在您有另一个客户端在与您的 REST 端点通信之前没有获取会话 ID?
  • 我们的 GWT Web 应用程序已经在访问 REST 服务。现在我们需要能够访问这些相同服务的独立应用程序。
  • 您是否已有允许您登录的服务?即您发布用户名/密码并回复会话ID 的东西?如果没有,最简单的方法是创建它并让您的独立应用程序的第一个调用是该服务。所有进一步的调用都需要提供该 ID。
  • 是的,我们有这样的服务。服务的登录方法返回用户对象,同时将该对象存储到 HttpSession 中。正如我所说,servlet 过滤器使用这个对象来过滤未经身份验证的请求。您能否提供代码示例,如何将此 id 提供给下一个服务调用?

标签: java rest resteasy


【解决方案1】:

假设您的独立客户端是用 Java 编写的。
那么示例代码将如下所示。

首先,我们需要通过调用您的身份验证服务来对用户进行身份验证并获取有效的会话 ID。假设获取的会话 id 等价于“f47cdba8-d066-48e8-ad29-8c4222906bc7”。然后我们可以使用有效的会话 ID 作为 HTTP 标头参数调用 REST 服务。

String url = "http://localhost:8081/AuthService/";

URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

// optional default is GET
con.setRequestMethod("GET");

//add request header
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Authorization", "token=f47cdba8-d066-48e8-ad29-8c4222906bc7");

int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();

//print result
System.out.println(response.toString());

在后端,您需要处理基于 Session ID 的 HTTP 标头参数,并在处理即将到来的请求之前对其进行验证。
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2012-03-31
    • 2010-12-20
    相关资源
    最近更新 更多