有时通过过滤器 Filter 与包装 HttpServletRequest 添加自定义 header;非常有用。有类似如下一些场景:
定义 HttpServletRequest 包装类
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import java.util.*; /** * Filter请求拦截中添加header属性 * */public class CustomRequestWrapper extends HttpServletRequestWrapper { private Map headerMap = new HashMap(); public CustomRequestWrapper(HttpServletRequest request) { super(request); } public void addHeader(String name, String value) { headerMap.put(name, value); } @Override public String getHeader(String name) { String headerValue = super.getHeader(name); if (headerMap.containsKey(name)) { headerValue = headerMap.get(name); } return headerValue; } @Override public Enumeration getHeaderNames() { List names = Collections.list(super.getHeaderNames()); for (String name : headerMap.keySet()) { names.add(name); } return Collections.enumeration(names); } @Override public Enumeration getHeaders(String name) { List values = Collections.list(super.getHeaders(name)); if (headerMap.containsKey(name)) { values.add(headerMap.get(name)); } return Collections.enumeration(values); }} public class CustomHeaderFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; CustomRequestWrapper requestWrapper = new CustomRequestWrapper(req); //获得请求参数中的token值 String token = request.getParamter("token"); if(!StringUtils.isEntry(token)){ // TODO 处理token调用addHeader方法 } chain.doFilter(request, response); // Goes to default servlet. } @Override public void init(FilterConfig filterConfig) throws ServletException { }} | 留言与评论(共有 0 条评论) “” |