私はシナリオを持っています。いくつかのユーティリティの依存関係に依存私のspringbootアプリケーションにヘッダーが転送されていません。私はフィルタを作成しようとしましたが、その中にリクエストラッパーを作成しました。 より優れたソリューションのフィルタのみ、またはラッパーのみを使用する必要がありますか?余分なヘッダーを追加するためにラッパーまたはフィルターを使用しますか?
私のコードは以下のとおりです。うまくいきますが、最適化したかったです。
@Component
public class AddVersionFilter implements Filter{
private static final Logger log =
LoggerFactory.getLogger(AddVersionFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
// TODO Auto-generated method stub
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(httpRequest) {
public String getHeader(String name) {
String header = super.getHeader(name);
if(name.equalsIgnoreCase("Version") && header == null)
{
log.info("Setting Version");
return "23";
}
else
{
log.info("other headers");
return (header != null) ? header : super.getParameter(name); // Note: you can't use getParameterValues() here.
}
}
public Enumeration<String>getHeaderNames() {
List<String> names = Collections.list(super.getHeaderNames());
names.addAll(Collections.list(super.getParameterNames()));
names.add("Version");
log.info(names.toString());
return Collections.enumeration(names);
}
};
chain.doFilter(wrapper, response);
log.info(" schema version " +httpRequest.getHeader("Version"));
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
パラメータとして設定されていても、null以外の値を返すことを目的としていました。 –