当前位置:   article > 正文

cloub spring 拦截器_SpringCloud:学习Gateway网关拦截器的ServerWebExchange

org.springframework.web.server.defaultserverwebexchangebuilder

1.Gateway的拦截器

我们要在项目中实现一个拦截器,需要继承两个类:GlobalFilter, Ordered

Ordered:拦截器的顺序,不多说

于是一个简单的拦截器就有了

@Slf4j

@Componentpublic class AuthFilter implementsGlobalFilter, Ordered {@Overridepublic Monofilter(ServerWebExchange exchange, GatewayFilterChain chain) {returnchain.filter(exchange);

}@Overridepublic intgetOrder() {return-10;

}

}

Gateway的核心接口:GatewayFilter,GlobalFilter,GatewayFilterChain。具体介绍:https://www.cnblogs.com/bjlhx/p/9786478.html

2.简介

我们在使用Spring Cloud Gateway的时候,注意到过滤器(包括GatewayFilter、GlobalFilter和过滤器链GatewayFilterChain),都依赖到ServerWebExchange。

这里的设计和Servlet中的Filter是相似的,当前过滤器可以决定是否执行下一个过滤器的逻辑,由GatewayFilterChain#filter()是否被调用来决定。而ServerWebExchange就相当于当前请求和响应的上下文。

ServerWebExchange实例不单存储了Request和Response对象,还提供了一些扩展方法,如果想实现改造请求参数或者响应参数,就必须深入了解ServerWebExchange。

3.ServerWebExchange

ServerWebExchange的注释: ServerWebExchange是一个HTTP请求-响应交互的契约。提供对HTTP请求和响应的访问,并公开额外的服务器端处理相关属性和特性,如请求属性。

其实,ServerWebExchange命名为服务网络交换器,存放着重要的请求-响应属性、请求实例和响应实例等等,有点像Context的角色。

3.1.所有接口

public interfaceServerWebExchange {//日志前缀属性的KEY,值为org.springframework.web.server.ServerWebExchange.LOG_ID//可以理解为 attributes.set("org.springframework.web.server.ServerWebExchange.LOG_ID","日志前缀的具体值");//作用是打印日志的时候会拼接这个KEY对饮的前缀值,默认值为""

String LOG_ID_ATTRIBUTE = ServerWebExchange.class.getName() + ".LOG_ID";

String getLogPrefix();//获取ServerHttpRequest对象

ServerHttpRequest getRequest();//获取ServerHttpResponse对象

ServerHttpResponse getResponse();//返回当前exchange的请求属性,返回结果是一个可变的Map

MapgetAttributes();//根据KEY获取请求属性

@Nullabledefault T getAttribute(String name) {return(T) getAttributes().get(name);

}//根据KEY获取请求属性,做了非空判断

@SuppressWarnings("unchecked")default T getRequiredAttribute(String name) {

T value=getAttribute(name);

Assert.notNull(value, ()-> "Required attribute '" + name + "' is missing");returnvalue;

}//根据KEY获取请求属性,需要提供默认值

@SuppressWarnings("unchecked")default T getAttributeOrDefault(String name, T defaultValue) {return(T) getAttributes().getOrDefault(name, defaultValue);

}//返回当前请求的网络会话

MonogetSession();//返回当前请求的认证用户,如果存在的话

MonogetPrincipal();//返回请求的表单数据或者一个空的Map,只有Content-Type为application/x-www-form-urlencoded的时候这个方法才会返回一个非空的Map -- 这个一般是表单数据提交用到

Mono>getFormData();//返回multipart请求的part数据或者一个空的Map,只有Content-Type为multipart/form-data的时候这个方法才会返回一个非空的Map -- 这个一般是文件上传用到

Mono>getMultipartData();//返回Spring的上下文

@Nullable

ApplicationContext getApplicationContext();//这几个方法和lastModified属性相关

booleanisNotModified();booleancheckNotModified(Instant lastModified);booleancheckNotModified(String etag);booleancheckNotModified(@Nullable String etag, Instant lastModified);//URL转换

String transformUrl(String url);//URL转换映射

void addUrlTransformer(Functiontransformer);//注意这个方法,方法名是:改变,这个是修改S

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/613017
推荐阅读
相关标签
  

闽ICP备14008679号