Я экспериментирую с использованием Джерси 2.17, пытающегося создать веб-службы RESTful, я читал Jersey User guide 2.17 и следил за инструкциями в главе 10 по созданию фильтров. Моя проблема в том, что фильтр работает отлично, когда ресурс вызывается из браузера, однако, когда я вызываю ресурс из тестового клиента Java Java, фильтр не запускается. , фильтр является PreMatching ContainerRequestFilter, есть ли у вас какие-либо идеи, если есть дополнительный параметр, необходимый для включения фильтра по всему ресурсу, я имею в виду заставить его работать, даже если вызов выполняется из тестового клиента, а не из браузера.Jersey ContainerRequestFilter работает только в режиме broswer
Это на requestFilter
package com.vogella.jersey.fist;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Response;
@PreMatching
public class RequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext arg0) throws IOException {
System.out.println(" Media Type : "+arg0.getMediaType());
System.out.println("Method Type : "+arg0.getMethod());
System.out.println("Method length : "+arg0.getLength());
System.out.println("request time : "+arg0.getDate());
System.out.println(" message : "+arg0.toString());
arg0.abortWith(Response
.status(Response.Status.UNAUTHORIZED)
.entity("User cannot access the resource.")
.build());
}
}
и это myApplicationFile:
package com.vogella.jersey.fist;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("/")
public class MyApplication extends ResourceConfig {
public MyApplication() {
// Resources.
packages(Hello.class.getPackage().getName());
// register(LoggingFilter.class);
register(RequestFilter.class);
// register(ResponseFilter.class);
}
}
и, наконец, это моя web.xml:
[<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>com.vogella.jersey.first</display-name>
<servlet>
<servlet-name>MyApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.vogella.jersey.fist</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.vogella.jersey.fist.RequestFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyApplication</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>][2]
ниже мой Test Client Code.
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
// client.register(MyJAXBContextProvider.class);
WebTarget service = client.target(UriBuilder.fromUri("http://localhost:8080/com.vogella.jersey.fist").build());
System.out.println(service.path("rest").path("todo").request().accept(MediaType.TEXT_HTML).get(String.class));
Todo a = service.path("rest").path("todo").request().accept(MediaType.APPLICATION_XML).get(Todo.class) ;
System.out.println(a.getDescription());
Может кто-нибудь сказать мне, как преодолеть эту проблему? PS: Я использую TomCat8 в качестве сервера.
Можете ли вы показать код клиента. Вы проверили какие-либо исключения? Вы проверили статус ответа от кода клиента? –
Также избавитесь от этого init-param 'com.sun.jersey.spi.container.ContainerRequestFilters'. Это мусор. Это только для Джерси 1.x –
Я поделюсь клиентским кодом. , а для исключений я не получаю никаких исключений на стороне клиента или сервера, кажется, что Джерси игнорирует фильтр, если запрос, сделанный из ни одного приложения на основе браузера –