I'm trying to extract user-agent in my custom filter:
public class MyFilter extends Filter {
@Override
protected int beforeHandle(Request request, Response response) {
String ua = request.getClientInfo().getAgent();
}
}
But I always get ua
null.
When the request proceeds to my Resource
, I do manage to extract the user-agent using the call:
String ua = getRequest().getClientInfo().getAgent();
Questions:
I just did a test of your use case with version 2.3.1 of Restlet and I can't reproduce your problem. Could you give us more hints about your context.
Here is what I used.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.restlet</groupId>
<artifactId>restlet-user-agent</artifactId>
<name>${project.artifactId}</name>
<packaging>jar</packaging>
<version>1.0.0-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>
Filter
public class MyFilter extends Filter {
public MyFilter() {
super();
}
public MyFilter(Context context, Restlet next) {
super(context, next);
}
public MyFilter(Context context) {
super(context);
}
@Override
protected int beforeHandle(Request request, Response response) {
String ua = request.getClientInfo().getAgent();
System.out.println("[filter] ua = " + ua);
return Filter.CONTINUE;
}
}
Server resource
public class MyServerResource extends ServerResource {
@Get
public String test() {
String ua = getRequest().getClientInfo().getAgent();
System.out.println("[server resource] ua = " + ua);
return "test";
}
}
Application
public class RestletApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/test", MyServerResource.class);
MyFilter filter = new MyFilter(getContext(), router);
return filter;
}
}
Here are the traces I got using Postman in Chrome:
[filter] ua = Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
[server resource] ua = Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
Hope it helps you nevertheless. Thierry