gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:25 25 4
gpt4 key购买 nike

我正在尝试在我的自定义过滤器中提取用户代理:

public class MyFilter extends Filter {
@Override
protected int beforeHandle(Request request, Response response) {
String ua = request.getClientInfo().getAgent();
}
}

但我总是得到 ua null

当请求进入我的Resource 时,我设法使用以下调用提取用户代理:

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

问题:

  1. 为什么会这样?
  2. 我怎样才能克服这个问题?

最佳答案

我刚刚使用 ReSTLet 2.3.1 版对您的用例进行了测试,但我无法重现您的问题。你能给我们更多关于你的背景的提示吗。

这是我用的。

  • 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>
  • 过滤

    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;
    }
    }
  • 服务器资源

    public class MyServerResource extends ServerResource {
    @Get
    public String test() {
    String ua = getRequest().getClientInfo().getAgent();
    System.out.println("[server resource] ua = " + ua);
    return "test";
    }
    }
  • 申请

    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;
    }
    }

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

希望对你有所帮助。蒂埃里

关于java - 资源前面的过滤器中没有用户代理 (getAgent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925559/

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