springbootリクエストヘッダーを追加(HttpServletRequestWrapperによって実装)
******************************
関連するクラスとインターフェース
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) {
******************************
例
***********************
フィルター層
CustomHttpServletRequest:カスタム要求クラス、関連メソッドを追加
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:フィルターはリクエストにヘッダーを追加します
@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);
}
}
***********************
構成レイヤー
WebMvcConfig:インターセプターを登録し、指定されたリクエストにヘッダーを追加します
@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;
}
}
***********************
コントローラー層
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";
}
}
************************
コンソール出力
瓜田李下
説明:インターフェイス/ helloを呼び出し、インターセプターがリクエストをインターセプトし、リクエストヘッダーを追加します