【发布时间】:2019-10-15 14:35:00
【问题描述】:
使用Webflux 过滤器,我试图拦截请求并检查请求是否来自某个URI,然后添加一个新的Authorization 标头
过滤器代码简洁明了
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class AuthorizationFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(Optional.of(exchange)
.filter(serverWebExchange -> serverWebExchange.getRequest().getURI().getPath().endsWith("/callback"))
.map(serverWebExchange -> addNewHeader(serverWebExchange))
.orElse(exchange));
}
private ServerWebExchange addNewHeader(ServerWebExchange serverWebExchange) {
String authHeader=serverWebExchange.getRequest().getQueryParams().get("state").get(0);
if (authHeader == null) {
throw new BadRequestException("State not complete (access_token missing) for //callback");
}
try {
serverWebExchange.getRequest().getHeaders().setBearerAuth(authHeader);
}catch (Throwable t){
t.printStackTrace();
}
return serverWebExchange;
}
}
但是会抛出异常
java.lang.UnsupportedOperationException
at org.springframework.http.ReadOnlyHttpHeaders.set(ReadOnlyHttpHeaders.java:99)
at org.springframework.http.HttpHeaders.setBearerAuth(HttpHeaders.java:774)
标题映射似乎是只读的。我怎样才能克服这个问题并添加新的标题?
【问题讨论】:
标签: java spring spring-webflux