运营相关

Spring Boot 处理 HTTP Headers

2020-04-16  本文已影响0人  又语

本文介绍 Spring Boot 2 读写 HTTP Headers 的方法。


目录


读取 HTTP Headers

使用注解 @RequestHeader 获取特定名称 HTTP Header 的值。

读取指定名称的 HTTP Header
@GetMapping("/read")
public String read(@RequestHeader(name = HEADER_AUTHORIZATION, required = false) String authorization) {
    return "Read HTTP Header[" + HEADER_AUTHORIZATION + "]: " + authorization;
}
读取全部 HTTP Header

读取全部 HTTP Header 可选参数类型包括:MapMultiValueMapHttpHeaders

@GetMapping("/read/all1")
public String readAll1(@RequestHeader Map<String, String> headers) {
    StringBuilder content = new StringBuilder();
    headers.forEach((key, value) -> content.append(key).append("=").append(value).append(";"));
    return "Read HTTP Headers: " + content.toString();
}

@GetMapping("/read/all2")
public String readAll2(@RequestHeader MultiValueMap<String, String> headers) {
    StringBuilder content = new StringBuilder();
    headers.forEach((key, value) -> content.append(key).append("=").append(value).append(";"));
    return "Read HTTP Headers: " + content.toString();
}

@GetMapping("/read/all3")
public String readAll3(@RequestHeader HttpHeaders headers) {
    InetSocketAddress host = headers.getHost();
    System.out.println("URL: " + host.getHostName() + ":" + host.getPort());
    StringBuilder content = new StringBuilder();
    headers.forEach((key, value) -> content.append(key).append("=").append(value).append(";"));
    return "Read HTTP Headers: " + content.toString();
}

@RequestHeader 注解属性说明:


写入 HTTP Headers

使用 HttpServletResponse 对象
@GetMapping("/write/HttpServletResponse")
public String writeByHttpServletResponse() {
    response.addHeader(HEADER_AUTHORIZATION, "By HttpServletResponse");
    return "Write HTTP Header[" + HEADER_AUTHORIZATION + "]";
}
使用 ResponseEntity 返回值
@GetMapping("/write/ResponseEntity1")
public ResponseEntity<String> writeByResponseEntity1() {
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.set(HEADER_AUTHORIZATION, "By ResponseEntity1");
    return ResponseEntity.ok()
            .headers(responseHeaders)
            .body("Write HTTP Header[" + HEADER_AUTHORIZATION + "]");
}

@GetMapping("/write/ResponseEntity2")
public ResponseEntity<String> writeByResponseEntity2() {
    return ResponseEntity.ok()
            .header(HEADER_AUTHORIZATION, "By ResponseEntity2")
            .body("Write HTTP Header[" + HEADER_AUTHORIZATION + "]");
}
自定义过滤器为所有响应统一添加
package tutorial.spring.boot.mvc.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
@WebFilter
public class HttpHeaderFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.addHeader("Valid", "1");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读