简体   繁体   English

过滤器之前的资源中没有用户代理(getAgent)

[英]No user-agent (getAgent) in filter preceding resource

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 . 但是,我总是得到ua

When the request proceeds to my Resource , I do manage to extract the user-agent using the call: 当请求进入我的Resource ,我设法使用该调用解压缩用户代理:

String ua = getRequest().getClientInfo().getAgent();

Questions: 问题:

  1. Why does it happen? 为什么会这样?
  2. How can I overcome this? 我怎么能克服这个?

I just did a test of your use case with version 2.3.1 of Restlet and I can't reproduce your problem. 我刚刚使用Restlet版本2.3.1对您的用例进行了测试,我无法重现您的问题。 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: 以下是我在Chrome中使用Postman的痕迹:

[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 蒂埃里

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM