下面列出了org.springframework.http.HttpHeaders#remove ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private String setAuthHeader(RequestData data, MappingProperties mapping) {
// default to anonymous web when prove otherwise
String authorization = AuthConstant.AUTHORIZATION_ANONYMOUS_WEB;
HttpHeaders headers = data.getHeaders();
Session session = this.getSession(data.getOriginRequest());
if (session != null) {
if (session.isSupport()) {
authorization = AuthConstant.AUTHORIZATION_SUPPORT_USER;
} else {
authorization = AuthConstant.AUTHORIZATION_AUTHENTICATED_USER;
}
this.checkBannedUsers(session.getUserId());
headers.set(AuthConstant.CURRENT_USER_HEADER, session.getUserId());
} else {
// prevent hacking
headers.remove(AuthConstant.CURRENT_USER_HEADER);
}
headers.set(AuthConstant.AUTHORIZATION_HEADER, authorization);
return authorization;
}
public JSONObject getToken(String userName, String password, String type, HttpHeaders headers) {
OpenOAuth2ClientDetails clientDetails = clientProperties.getOauth2().get("portal");
String url = WebUtils.getServerUrl(WebUtils.getHttpServletRequest()) + "/oauth/token";
// 使用oauth2密码模式登录.
MultiValueMap<String, Object> postParameters = new LinkedMultiValueMap<>();
postParameters.add("username", userName);
postParameters.add("password", password);
postParameters.add("client_id", clientDetails.getClientId());
postParameters.add("client_secret", clientDetails.getClientSecret());
postParameters.add("grant_type", "password");
// 添加参数区分,第三方登录
postParameters.add("login_type", type);
// 使用客户端的请求头,发起请求
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 强制移除 原来的请求头,防止token失效
headers.remove(HttpHeaders.AUTHORIZATION);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity(postParameters, headers);
JSONObject result = restTemplate.postForObject(url, request, JSONObject.class);
return result;
}
public JSONObject getToken(String userName, String password, String type, HttpHeaders headers) {
OpenOAuth2ClientDetails clientDetails = clientProperties.getOauth2().get("admin");
String url = WebUtils.getServerUrl(WebUtils.getHttpServletRequest()) + "/oauth/token";
// 使用oauth2密码模式登录.
MultiValueMap<String, Object> postParameters = new LinkedMultiValueMap<>();
postParameters.add("username", userName);
postParameters.add("password", password);
postParameters.add("client_id", clientDetails.getClientId());
postParameters.add("client_secret", clientDetails.getClientSecret());
postParameters.add("grant_type", "password");
// 添加参数区分,第三方登录
postParameters.add("login_type", type);
// 使用客户端的请求头,发起请求
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 强制移除 原来的请求头,防止token失效
headers.remove(HttpHeaders.AUTHORIZATION);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity(postParameters, headers);
JSONObject result = restTemplate.postForObject(url, request, JSONObject.class);
return result;
}
/**
* Remove any protocol-level headers from the remote server's response that
* do not apply to the new response we are sending.
*
* @param response
*/
protected void prepareForwardedResponseHeaders(ResponseData response) {
HttpHeaders headers = response.getHeaders();
headers.remove(TRANSFER_ENCODING);
headers.remove(CONNECTION);
headers.remove("Public-Key-Pins");
headers.remove(SERVER);
headers.remove("Strict-Transport-Security");
}
private boolean isResourceNotModified(ServletServerHttpRequest request, ServletServerHttpResponse response) {
ServletWebRequest servletWebRequest =
new ServletWebRequest(request.getServletRequest(), response.getServletResponse());
HttpHeaders responseHeaders = response.getHeaders();
String etag = responseHeaders.getETag();
long lastModifiedTimestamp = responseHeaders.getLastModified();
if (request.getMethod() == HttpMethod.GET || request.getMethod() == HttpMethod.HEAD) {
responseHeaders.remove(HttpHeaders.ETAG);
responseHeaders.remove(HttpHeaders.LAST_MODIFIED);
}
return servletWebRequest.checkNotModified(etag, lastModifiedTimestamp);
}
private boolean isResourceNotModified(ServletServerHttpRequest request, ServletServerHttpResponse response) {
ServletWebRequest servletWebRequest =
new ServletWebRequest(request.getServletRequest(), response.getServletResponse());
HttpHeaders responseHeaders = response.getHeaders();
String etag = responseHeaders.getETag();
long lastModifiedTimestamp = responseHeaders.getLastModified();
if (request.getMethod() == HttpMethod.GET || request.getMethod() == HttpMethod.HEAD) {
responseHeaders.remove(HttpHeaders.ETAG);
responseHeaders.remove(HttpHeaders.LAST_MODIFIED);
}
return servletWebRequest.checkNotModified(etag, lastModifiedTimestamp);
}
private boolean isResourceNotModified(ServletServerHttpRequest inputMessage, ServletServerHttpResponse outputMessage) {
ServletWebRequest servletWebRequest =
new ServletWebRequest(inputMessage.getServletRequest(), outputMessage.getServletResponse());
HttpHeaders responseHeaders = outputMessage.getHeaders();
String etag = responseHeaders.getETag();
long lastModifiedTimestamp = responseHeaders.getLastModified();
if (inputMessage.getMethod() == HttpMethod.GET || inputMessage.getMethod() == HttpMethod.HEAD) {
responseHeaders.remove(HttpHeaders.ETAG);
responseHeaders.remove(HttpHeaders.LAST_MODIFIED);
}
return servletWebRequest.checkNotModified(etag, lastModifiedTimestamp);
}
void rewriteHeaders(HttpHeaders headers, Consumer<HttpHeaders> headersSetter) {
HttpHeaders rewrittenHeaders = copyHeaders(headers);
rewrittenHeaders.remove(TRANSFER_ENCODING);
rewrittenHeaders.remove(CONNECTION);
rewrittenHeaders.remove(PUBLIC_KEY_PINS);
rewrittenHeaders.remove(SERVER);
rewrittenHeaders.remove(STRICT_TRANSPORT_SECURITY);
headersSetter.accept(rewrittenHeaders);
log.debug("Response headers rewritten from {} to {}", headers, rewrittenHeaders);
}
void rewriteHeaders(HttpHeaders headers, Consumer<HttpHeaders> headersSetter) {
HttpHeaders rewrittenHeaders = copyHeaders(headers);
rewrittenHeaders.set(CONNECTION, "close");
rewrittenHeaders.remove(TE);
headersSetter.accept(rewrittenHeaders);
log.debug("Request headers rewritten from {} to {}", headers, rewrittenHeaders);
}
void removeCookies(HttpHeaders headers, String cookieHeaderName, Consumer<HttpHeaders> headersSetter) {
HttpHeaders rewrittenHeaders = copyHeaders(headers);
List<String> removedCookies = rewrittenHeaders.remove(cookieHeaderName);
if (isNotEmpty(removedCookies)) {
headersSetter.accept(rewrittenHeaders);
log.debug("Cookies {} removed from response", removedCookies);
}
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
if (null == this.aviCredentials.getSessionID() || this.aviCredentials.getSessionID().isEmpty()) {
AviRestUtils.authenticateSession(this.aviCredentials);
}
HttpHeaders headers = request.getHeaders();
headers.add("Content-Type", "application/json");
headers.add("X-Avi-Version", this.aviCredentials.getVersion());
headers.add("X-Avi-Tenant", this.aviCredentials.getTenant());
headers.add("X-CSRFToken", this.aviCredentials.getCsrftoken());
headers.add("Referer", AviRestUtils.getControllerURL(this.aviCredentials));
headers.add(HttpHeaders.COOKIE, "csrftoken=" + this.aviCredentials.getCsrftoken() + "; " + "avi-sessionid="
+ this.aviCredentials.getSessionID());
ClientHttpResponse response = execution.execute(request, body);
int responseCode = response.getRawStatusCode();
if (Arrays.asList(419, 401).contains(responseCode)) {
this.numApiExecCount++;
while (numApiExecCount < this.aviCredentials.getNumApiRetries()) {
headers.remove("X-CSRFToken");
headers.remove("Cookie");
AviRestUtils.authenticateSession(this.aviCredentials);
headers.add("X-CSRFToken", this.aviCredentials.getCsrftoken());
headers.add("Cookie", "csrftoken=" + this.aviCredentials.getCsrftoken() + "; " + "avi-sessionid="
+ this.aviCredentials.getSessionID());
response = execution.execute(request, body);
if (Arrays.asList(419, 401).contains(response.getRawStatusCode())) {
this.numApiExecCount++;
continue;
}
else {
break;
}
}
}
return response;
}
@Override
@SuppressWarnings("unchecked")
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange,
GatewayFilterChain chain) {
Class inClass = config.getInClass();
ServerRequest serverRequest = ServerRequest.create(exchange,
messageReaders);
// TODO: flux or mono
Mono<?> modifiedBody = serverRequest.bodyToMono(inClass)
.flatMap(originalBody -> config.getRewriteFunction()
.apply(exchange, originalBody))
.switchIfEmpty(Mono.defer(() -> (Mono) config.getRewriteFunction()
.apply(exchange, null)));
BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody,
config.getOutClass());
HttpHeaders headers = new HttpHeaders();
headers.putAll(exchange.getRequest().getHeaders());
// the new content type will be computed by bodyInserter
// and then set in the request decorator
headers.remove(HttpHeaders.CONTENT_LENGTH);
// if the body is changing content types, set it here, to the bodyInserter
// will know about it
if (config.getContentType() != null) {
headers.set(HttpHeaders.CONTENT_TYPE, config.getContentType());
}
CachedBodyOutputMessage outputMessage = new CachedBodyOutputMessage(
exchange, headers);
return bodyInserter.insert(outputMessage, new BodyInserterContext())
// .log("modify_request", Level.INFO)
.then(Mono.defer(() -> {
ServerHttpRequest decorator = decorate(exchange, headers,
outputMessage);
return chain
.filter(exchange.mutate().request(decorator).build());
})).onErrorResume(
(Function<Throwable, Mono<Void>>) throwable -> release(
exchange, outputMessage, throwable));
}
@Override
public String toString() {
return filterToStringCreator(ModifyRequestBodyGatewayFilterFactory.this)
.append("Content type", config.getContentType())
.append("In class", config.getInClass())
.append("Out class", config.getOutClass()).toString();
}
};
}
/**
* Remove any protocol-level headers from the clients request that
* do not apply to the new request we are sending to the remote server.
*
* @param request
* @param destination
*/
protected void prepareForwardedRequestHeaders(RequestData request, ForwardDestination destination) {
HttpHeaders headers = request.getHeaders();
//headers.set(HOST, destination.getUri().getAuthority());
headers.remove(TE);
}