package com.example.springdemo.aspect; import org.apache.tomcat.util.http.MimeHeaders; import org.springframework.util.StringUtils; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Objects; @WebFilter public class AuthHeaderSettingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { Filter.super.init(filterConfig); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; String type = req.getContentType(); if (!StringUtils.isEmpty(type)) { Map map = new HashMap<>(); map.put("Content-Type", "image/jpeg"); if (Objects.equals(req.getRequestURI(), "/uploadFile")) { modifyHeaders(map, req); } } String content = req.getContentType(); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { Filter.super.destroy(); } private void modifyHeaders(Map headerses, HttpServletRequest request){ if (headerses == null || headerses.isEmpty()) { return; } Class requestClass = request.getClass(); try { Field requestFlied = requestClass.getDeclaredField("request"); requestFlied.setAccessible(true); Object reqObject = requestFlied.get(request); Field coyoteRequest = reqObject.getClass().getDeclaredField("coyoteRequest"); coyoteRequest.setAccessible(true); Object coyoteObject = coyoteRequest.get(reqObject); Field headers = coyoteObject.getClass().getDeclaredField("headers"); headers.setAccessible(true); MimeHeaders header = (MimeHeaders)headers.get(coyoteObject); for (Map.Entry entry : headerses.entrySet()) { header.removeHeader(entry.getKey()); header.addValue(entry.getKey()).setString(entry.getValue()); } } catch (Exception e) { e.printStackTrace(); } } }