【发布时间】:2018-02-01 02:00:17
【问题描述】:
我有一个场景。由于某些实用程序依赖,标头没有被转发到我的 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
}
}
【问题讨论】: