Spring RestEasy拦截器

时间:2016-10-17 03:25:39

标签: spring spring-mvc resteasy

我有一个带有resteasy-spring-3.0.19和jboss-jaxrs-api_2.0_spec-1.0.0的Spring启动应用程序。

我想拦截所有其他的授权电话。

拦截器未被调用。另外,如何在拦截器中获取目标方法@Path注释值。

我是否需要在Spring启动应用程序中注册?

@Provider
public class AuthorizationtInterceptor implements ContainerRequestFilter{

    /**
     * 
     */
    public AuthorizationtInterceptor() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {

        String method = requestContext.getMethod();

        UriInfo uriInfo = requestContext.getUriInfo();

        // Need the target method @Path annotation value ....

    }

}

目标休息班,

@Named
@Singleton
@Path(ROOT_PATH)
public class WebController {

    @GET
    @Path(TEST_PATH)
    @Produces(MediaType.APPLICATION_JSON)
    public Response getUser(@Context final HttpServletRequest request) {
    }
}

1 个答案:

答案 0 :(得分:2)

在后匹配过滤器(没有@PreMatching注释的过滤器)中,您可以使用ResourceInfo来获取匹配的资源类和资源方法。

使用ResourceInfo注释在您的过滤器中注入@Context

@Context
private ResourceInfo resourceInfo;

然后获取资源类并提取@Path注释:

Path path = resourceInfo.getResourceClass().getAnnotation(Path.class);

要获取资源方法,请使用:

Path path = resourceInfo.getResourceMethod().getAnnotation(Path.class);

根据您要实现的目标,您可以考虑将过滤器绑定到一组资源类或方法,而不是将@Path注释的值进行比较以进行授权。请参阅此answer

中的详细信息

根据您设置应用程序的方式,您可能需要在Application子类或web.xml部署描述符中注册过滤器。