在CXF Web服务项目中编写拦截器



我如何编写一个CXF拦截器来防止基于某些特定条件执行几个Restful URL。我知道我需要编写一个扩展URIMappingInterceptor的拦截器。必须根据将被调用的url或函数的名称来进行阻塞。我需要立即返回抛出错误。

您可以扩展AbstractInDatabindingInterceptor,并使用message.get,获取url或uri并进行验证。

public class RestInInterceptor extends AbstractInDatabindingInterceptor {
    private static final Logger LOG = LoggerFactory
            .getLogger(RestInInterceptor.class);
    public RestInInterceptor(String phase) {
        super(Phase.USER_STREAM);
        // TODO Auto-generated constructor stub
    }
    public RestInInterceptor() {
        super(Phase.USER_STREAM);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void handleMessage(Message message) throws Fault {
        Endpoint endpoint = message.getExchange().getEndpoint();
        String output = "";
        // for uri key is org.apache.cxf.request.uri
        String url = (String) message.get("org.apache.cxf.request.url");
        if(!"".equals(url) && url.contains("KP1Service")){
            Response response = Response.status(Response.Status.METHOD_NOT_ALLOWED).entity("").type(MediaType.TEXT_PLAIN) .build();
            message.getExchange().put(Response.class, response);
            return;
        }
    }
}

最新更新