我有一个带有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) {
}
}
答案 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
部署描述符中注册过滤器。