gpt4 book ai didi

java - ReSTLet 客户端在请求中设置的 Cookie 在 ReSTLet Servlet 结束时删除

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:57 44 4
gpt4 key购买 nike

我有一个测试客户端,它发出 ReSTLet 请求,如下所示:公共(public)类 TestReSTLet {

public static void main(String[] args) throws IOException {
CookieHandler.setDefault(new CookieManager( null, CookiePolicy.ACCEPT_ALL ));
ClientResource resource = getClientResource();
Representation rep = resource.get();
System.out.println(rep.getText());

}

private static ClientResource getClientResource() {
String resouceURL = "http://localhost:8080/ActivitiSampleProject/service/process-definitions?suspended=false";
CookieSetting cookie1 = new CookieSetting("USER", "qdny6HjWY0HONvWoyufBWemrDE+5IcdsssssK0E8UGmu5RKPF7h0BWKvBPSn+Kucb82Aq");
cookie1.setDomain(".abc.com");
cookie1.setPath("/");
cookie1.setMaxAge(-1);
ClientResource resource = new ClientResource(resouceURL);
resource.getRequest().getCookies().add(cookie1);
return resource;
}

}

在服务器端,我想从请求中读取这些 cookie,并将它们发送回调用客户端,以根据 cookie 获取一些信息。

但我无法检索 cookie:我已将调试器设置为 org.reSTLet.ext.servlet.ServerServlet 的服务方法,并且请求没有 cookie。

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
.......
}

这是在请求中设置 cookie 的正确方法吗?我做错了什么?

通过使用以下代码进行一些点击和尝试后,我能够在服务器端检索 cookie。 ReSTLet的文档说ClientResource内部调用Client。有没有办法通过设置一些选项来使用 ClientResource 来实现相同的效果?我想使用 ClientResource 作为我计划引入更改的大部分代码,使用 ClientResource,所有示例源代码也使用 ClientResource。

public static void main(String[] args) throws IOException {
Client c = new Client(Protocol.HTTP);
Request request = new Request(Method.GET,
"http://localhost:8080/ActivitiSampleProjectNonSpring/service/hello");
request.getCookies().add("USER", "TESTCOOKIE");

Response response = c.handle(request);
Representation rep = response.getEntity();
System.out.println(rep.getText());
}

最佳答案

我使用以下 Maven 配置对 ReSTLet 2.3.1 进行了一些测试,并且您的用例使用独立的 ReSTLet 引擎在我这边工作。我使用了您在问题中提供的代码。您可以注意到,您需要显式添加 cookie 到响应中,才能将其发送回客户端。

这是 Maven 配置文件:

<project (...)>
<modelVersion>4.0.0</modelVersion>
<groupId>stackoverflow</groupId>
<artifactId>test-restlet-cookies</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>

<properties>
<java-version>1.7</java-version>
<restlet-version>2.3.1</restlet-version>
</properties>

<dependencies>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet-version}</version>
</dependency>
</dependencies>

<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.com</url>
</repository>
</repositories>
</project>

使用命令mvn eclipse:eclipse将其转换为Eclipse Java项目或mvn package构建相应的jar文件。

您可以在此处找到示例项目:https://github.com/templth/restlet-stackoverflow/tree/master/restlet/test-restlet-cookies .

看来您使用了ReSTLet的servlet扩展。我还对嵌入 servlet 容器中的 ReSTLet 应用程序进行了测试,它对我有用。我使用以下 Maven 文件:

<project (...)>
<modelVersion>4.0.0</modelVersion>
<groupId>stackoverflow</groupId>
<artifactId>test-restlet-cookies-servlet</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>

<properties>
<java-version>1.7</java-version>
<restlet-version>2.3.1</restlet-version>
<wtp-version>2.0</wtp-version>
</properties>

<dependencies>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet-version}</version>
</dependency>

<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet.ext.servlet</artifactId>
<version>${restlet-version}</version>
</dependency>
</dependencies>

<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.com</url>
</repository>
</repositories>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpapplicationxml>true</wtpapplicationxml>
<wtpversion>${wtp-version}</wtpversion>
</configuration>
</plugin>
</plugins>
</build>
</project>

使用命令mvn eclipse:eclipse将其转换为Eclipse Java项目或mvn package构建相应的war文件。您可以注意到 Eclipse 项目符合 WTP 标准,因此您可以连接到 Eclipse 中的服务器。

您可以在此处找到示例项目:https://github.com/templth/restlet-stackoverflow/tree/master/restlet/test-restlet-cookies-servlet .

希望对你有帮助蒂埃里

关于java - ReSTLet 客户端在请求中设置的 Cookie 在 ReSTLet Servlet 结束时删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388609/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com