JAX-RS Rest Filter 不调用
JAX-RS Rest Filter does not invoke
我有一个 api 需要实施安全性。
但是过滤器没有被调用。我的呼叫直接传递到端点...
我的安全界面
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Seguro {}
我的过滤器
@Seguro
@Provider
@Priority(Priorities.AUTHENTICATION)
public class FiltroAutenticacao implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
throw new NotAuthorizedException("Authorization header precisa ser provido");
}
String token = authorizationHeader.substring("Bearer".length()).trim();
try {
...
} catch (Exception e) {
...
}
}
}
我的方法需要认证。
@Seguro
@GET
@Path("/metodo-teste")
@Produces("application/json")
public Response medotoTeste(@QueryParam("codigo") String codigo){
ModeloTesteTO to = new ModeloTesteTO("codigo enviado foi " + codigo);
return Response.ok(to, MediaType.APPLICATION_JSON).build();
}
我还需要执行其他任何操作吗?
我的web.xml
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
<param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>br.gov.es.dataci.aprender</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>br.gov.es.dataci.aprender.seguranca.FiltroAutenticacao</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我正在使用 Jersey 1.17 和 glassfish 4
我发现了这个问题,按照 Paul 的建议尝试在 glassfish 上发布带有 Jersey 2 的应用程序,我发现 glassfish 版本不兼容。 Glassfish 4.0 不支持 jersey 2,4.1.2 版本支持。我迁移了服务器并解决了问题。
我有一个 api 需要实施安全性。
但是过滤器没有被调用。我的呼叫直接传递到端点...
我的安全界面
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Seguro {}
我的过滤器
@Seguro
@Provider
@Priority(Priorities.AUTHENTICATION)
public class FiltroAutenticacao implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
throw new NotAuthorizedException("Authorization header precisa ser provido");
}
String token = authorizationHeader.substring("Bearer".length()).trim();
try {
...
} catch (Exception e) {
...
}
}
}
我的方法需要认证。
@Seguro
@GET
@Path("/metodo-teste")
@Produces("application/json")
public Response medotoTeste(@QueryParam("codigo") String codigo){
ModeloTesteTO to = new ModeloTesteTO("codigo enviado foi " + codigo);
return Response.ok(to, MediaType.APPLICATION_JSON).build();
}
我还需要执行其他任何操作吗?
我的web.xml
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
<param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>br.gov.es.dataci.aprender</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>br.gov.es.dataci.aprender.seguranca.FiltroAutenticacao</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我正在使用 Jersey 1.17 和 glassfish 4
我发现了这个问题,按照 Paul 的建议尝试在 glassfish 上发布带有 Jersey 2 的应用程序,我发现 glassfish 版本不兼容。 Glassfish 4.0 不支持 jersey 2,4.1.2 版本支持。我迁移了服务器并解决了问题。