拦截器filter在rest客户端织入token

//拦截器的应用原理     自己写的在java代码中叫拦截器,在web.xml中配置叫监听
//变量的第三中方式
// getClient()这里有一个拦截器看看???????????????????????????????
工具类中用这种方式获取Client client = ClientBuilder.newClient();
public class NetworkQueryRsClient extends RsClient implements INetworkQueryRsClient{
@Override
public TenantNetwork queryTenantNetwork(String uuid) {

if(StringUtils.isEmpty(uuid))
{
return null;
}
//工具类中用这种方式获取Client client = ClientBuilder.newClient();这个与工具类中的相比工具类中每次都要设入token,这里用拦截器自动设入
Client client = getClient();
//用生成的有结构的客户端(拦截+预留的对象)到应用端装配需要拦截的对象到预留对象,之后发起动作即织入
WebTarget webTarget = client.target(vimRestRootUrl)
.path("vlinks_internal/" + uuid + "/detail");
Invocation.Builder invocationBuilder = webTarget.request(ContentType.APPLICATION_JSON_UTF_8);

TenantNetworkQueryResp resp = invocationBuilder.get(TenantNetworkQueryResp.class);

if(!resp.getRetCode().equals("ok"))
{
if(RestResultCode.ITEM_NOT_FOUND.equals(resp.getRetCode()))
{
logger.error(resp.getRetCode() + ":" + resp.getMsg());
return null;
}
else
{
throw new ManoException(resp.getRetCode(), resp.getMsg());
}
}

return resp.getResult();
}

}



package com.certusnet.nfv.mano.rsclient;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

import org.glassfish.jersey.client.ClientConfig;

public abstract class RsClient {
/** vim接口的host,如http://172.16.38.131:8080/vim/rest */
protected String vimRestRootUrl;

protected String vnfmRestRootUrl;


public String getVnfmRestRootUrl() {
return vnfmRestRootUrl;
}

public void setVnfmRestRootUrl(String vnfmRestRootUrl) {
this.vnfmRestRootUrl = vnfmRestRootUrl;
}

public String getVimRestRootUrl() {
return vimRestRootUrl;
}

public void setVimRestRootUrl(String vimRestRootUrl) {
this.vimRestRootUrl = vimRestRootUrl;
}

public Client getClient() {
//创建能注册拦截器的容器
ClientConfig clientConfig = new ClientConfig();
//注册拦截器
clientConfig.register(RsClientRequestFilter.class);
clientConfig.register(RsClientResponseFilter.class);
//生成代理客户端,之后用拦截器代理客户端去应用层把需要加拦截的地方装配到相应的结构中,然后触发调用。
return ClientBuilder.newClient(clientConfig);
}
}



//拦截器
package com.certusnet.nfv.mano.rsclient;
import java.io.IOException;
import java.net.URI;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;

import org.apache.log4j.Logger;

import com.certusnet.nfv.mano.ManoThreadLocal;

public class RsClientRequestFilter implements ClientRequestFilter {
private static Logger logger = Logger.getLogger(RsClientRequestFilter.class);


@Override
public void filter(ClientRequestContext context) throws IOException {
URI uri = context.getUri();
String url = uri.getHost() + ":" + uri.getPort() + uri.getPath();
logger.debug("Send request to " + url);

context.getHeaders().add("X-Auth-Token", ManoThreadLocal.getRestToken());
}

}

//拦截器
package com.certusnet.nfv.mano.rsclient;

import java.io.IOException;
import java.net.URI;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientResponseContext;
import javax.ws.rs.client.ClientResponseFilter;

import org.apache.log4j.Logger;

public class RsClientResponseFilter implements ClientResponseFilter{

private static Logger logger = Logger.getLogger(RsClientResponseFilter.class);

@Override
public void filter(ClientRequestContext arg0, ClientResponseContext arg1)
throws IOException {
URI uri = arg0.getUri();
String url0 = uri.getHost() + ":" + uri.getPort() + uri.getPath();
logger.debug("Got response from " + url0);

}

}



@GET
@Path("vlinks_internal/{vlink_uuid}/detail")
@Produces(ContentType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.TEXT_PLAIN)
public Network findNetworkById(
@PathParam("vlink_uuid") String vlinkUUID(直接用),@HeaderParam("X-Auth-Token") String token) throws ManoException {

logger.info("findNetworkById-X-Auth-Token="+token);
logger.info("findNetworkById-vlinkUUID="+vlinkUUID);

if ((null == vlinkUUID) || (vlinkUUID.trim().equalsIgnoreCase(""))) {
throw new ManoException(ExceptionCode.PARAM_NEEDED_IS_NULL);
}

try {

return networkService.findNetworkById(vlinkUUID,token);

} catch (ManoException ex) {
throw ex;
}  catch (Exception ex)
{
logger.error("findNetworkById-ex = " + ex);
throw new ManoException(ExceptionCode.FIND_VLINK_INTERNAL_FAILED, ex);
}



}

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2209357
今日推荐