`
y806839048
  • 浏览: 1108183 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

拦截器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);
}



}
分享到:
评论

相关推荐

    tokenSession拦截器的使用

    需要注意的是,在这里没有指定`invalid.token`的Result,因为`tokenSession`拦截器在检测到重复提交时,不会重定向到任何页面,而是阻止重复的请求并允许正常的请求继续执行。 #### 五、`tokenSession`拦截器的工作...

    rest-framework生成token

    使用rest-framework在django中创建和认证token,用于在移动端来认证和用户,本文通过自己编写模型来实现根据用户来生成token,在请求头中添加Authentication来进行认证,保持登录状态。可以直接使用,编写过程可以...

    spring boot 拦截器拦截/Filter 过滤session案例

    在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...

    vue中前端利用refreshToken结合axios拦截器实现token的无感刷新

    1、响应拦截器处理401权限错误。 2、防止重复请求refreshToken接口。 3、同时多个请求返回401,需要刷新token。 阅读建议:此资源以简单的demo演示了RefreshToken使用的全过程,介绍了基本的思路,所以在学习的过程...

    vue 实现axios拦截、页面跳转和token 验证

    1. 请求拦截器:在发送请求之前,自动在请求头中添加token: ```javascript axios.interceptors.request.use(config => { if (store.state.token) { config.headers.Authorization = `token${store.state.token}...

    Struts拦截器及token拦截器防止重复提交例子源码

    1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按...

    grpc-demo:java版grpc 示例,使用拦截器实现了token认证

    【标题】:“grpc-demo:java版grpc 示例,使用拦截器实现了token认证” 在这个项目中,我们探讨的是如何在Java中利用gRPC框架实现基于JWT(JSON Web Token)的token认证。gRPC是一种高性能、开源的通用RPC框架,它...

    请求拦截器和响应拦截器.docx

    请求拦截器和响应拦截器是 Axios 库中提供的一种机制,用于在发送请求之前和响应数据返回之前对数据进行处理。下面是对这两个概念的详细解释: 请求拦截器 请求拦截器是指在发送请求之前对请求数据进行处理的机制...

    feign之间相互通信RequestInterceptor拦截器失效相关代码

    然而,在某些情况下,当两个Feign客户端互相通信时,可能会遇到RequestInterceptor(请求拦截器)失效的问题。这个问题通常发生在你需要在每次请求之前添加一些通用的HTTP头或者进行其他预处理操作时。 ...

    七牛云token生成器(纯客户端生成).exe

    可以根据AccessKey,SecretKey,Bucket_name,ExipreTime和key生成微信小程序上传图片等资源到七牛云时需要的token,七牛云不推荐纯客户端生成token,所以本小工具仅供测试哦,工具亮点:可以配置key,可以配置过期...

    JAXRS2.0REST客户端编程实例Java开发Java

    本篇将深入探讨JAX-RS 2.0在REST客户端编程中的应用实例,以及相关的Java开发技巧。 **1. JAX-RS 2.0核心概念** - **资源(Resources)**:在JAX-RS中,资源是通过Java类来表示的,这些类通常带有注解,如`@Path`...

    Android OkHttp实现全局过期token自动刷新示例

    拦截器的作用是拦截请求和响应,例如我们可以在拦截器中判断token是否过期,如果token过期则刷新token,然后重新请求网络数据。 下面是一个自定义的自动刷新token的拦截器的示例代码: ```java public class ...

    拦截器和控制器的区别

    3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 ...

    vue下axios拦截器token刷新机制的实例代码

    1. **axios拦截器**:axios拦截器允许我们在请求发送前或响应接收后添加额外的操作。在本例中,有两个拦截器,一个用于处理请求(`request.interceptors`),另一个用于处理响应(`response.interceptors`)。 2. *...

    vue拦截器实现统一token,并兼容IE9验证功能

    在这个拦截器中,我们可以从localStorage中获取Token,并将其添加到请求头中。 ```javascript axios.interceptors.request.use(function (config) { let token = window.localStorage.getItem("tokenid"); if ...

    自定义拦截器实现防止重复提交

    同时,这个令牌也会被添加到请求参数中,以便在客户端(通常是网页)显示。当用户再次提交表单时,如果提交的令牌与会话中的令牌不匹配,拦截器就会识别为重复提交,并返回一个错误提示(如"invalidToken"),防止...

    Springmvc登录拦截器Demo

    Spring MVC的拦截器是基于Servlet的Filter的一种扩展,它允许开发者在请求被控制器处理之前或之后执行一些操作。拦截器可以用来进行权限检查、日志记录、性能统计等任务。 2. **创建自定义拦截器** 首先,我们...

Global site tag (gtag.js) - Google Analytics