springboot add request header (implemented by HttpServletRequestWrapper)
******************************
Related classes and interfaces
HttpServletRequestWrapper
public class HttpServletRequestWrapper extends ServletRequestWrapper implements HttpServletRequest {
***************
构造方法
public HttpServletRequestWrapper(HttpServletRequest request) {
super(request);
}
***************
相关方法
public String getHeader(String name) {
public Enumeration<String> getHeaders(String name) {
public Enumeration<String> getHeaderNames() {
public int getIntHeader(String name) {
public long getDateHeader(String name) {
******************************
Examples
***********************
filter layer
CustomHttpServletRequest: custom request class, add related methods
public class CustomHttpServletRequest extends HttpServletRequestWrapper {
private Map<String,String> headers=new HashMap<>();
public CustomHttpServletRequest(HttpServletRequest request){
super(request);
}
public void addHeader(String name,String value){
headers.put(name, value);
}
@Override
public String getHeader(String name) {
String value=super.getHeader(name);
if (headers.containsKey(name)){
value=headers.get(name);
}
return value;
}
@Override
public Enumeration<String> getHeaderNames() {
List<String> names=Collections.list(super.getHeaderNames());
names.addAll(headers.keySet());
return Collections.enumeration(names);
}
@Override
public Enumeration<String> getHeaders(String name) {
List<String> list= Collections.list(super.getHeaders(name));
if (headers.containsKey(name)){
list.add(headers.get(name));
}
return Collections.enumeration(list);
}
}
CustomFilter: The filter adds a header to the request
@Component
public class CustomFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
CustomHttpServletRequest request=new CustomHttpServletRequest((HttpServletRequest) servletRequest);
request.addHeader("header","瓜田李下");
filterChain.doFilter(request,servletResponse);
}
}
***********************
config layer
WebMvcConfig: Register interceptor, add header to specified request
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Resource
private CustomFilter customFilter;
@Bean
public FilterRegistrationBean<CustomFilter> initFilterRegistrationBean(){
FilterRegistrationBean<CustomFilter> registrationBean=new FilterRegistrationBean<>();
registrationBean.setFilter(customFilter);
registrationBean.addUrlPatterns("/hello");
registrationBean.setOrder(0);
return registrationBean;
}
}
***********************
controller layer
HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello4(HttpServletRequest request){
String value=request.getHeader("header");
if (value!=null){
System.out.println(value);
}
return "hello world";
}
}
************************
Console output
瓜田李下
Description: call interface / hello, interceptor intercepts the request, add request header