diff --git a/demo/AuthHeaderSettingFilter b/demo/AuthHeaderSettingFilter new file mode 100644 index 0000000000000000000000000000000000000000..fc736ab9f85d1ea9b8c1d0ef588d90529daa92ba --- /dev/null +++ b/demo/AuthHeaderSettingFilter @@ -0,0 +1,65 @@ +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; + +@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"); + 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(); + } + } +} diff --git a/demo/FilterConfig b/demo/FilterConfig new file mode 100644 index 0000000000000000000000000000000000000000..b89e7816877c4ecc2a48031d33631285197f0915 --- /dev/null +++ b/demo/FilterConfig @@ -0,0 +1,19 @@ +package com.example.springdemo.config; + +import com.example.springdemo.aspect.AuthHeaderSettingFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FilterConfig { + @Bean + public FilterRegistrationBean modifyParametersFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new AuthHeaderSettingFilter()); + registration.addUrlPatterns("/*"); + registration.setName("authHeaderSettingFilter"); + registration.setOrder(1); + return registration; + } +} \ No newline at end of file diff --git a/demo/HelloController b/demo/HelloController new file mode 100644 index 0000000000000000000000000000000000000000..8314865e5b5dbea7577a47a5421f120426732532 --- /dev/null +++ b/demo/HelloController @@ -0,0 +1,82 @@ +package com.example.springdemo.controller; + +import com.example.springdemo.bean.Car; +import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.connector.Response; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.io.*; +import java.util.Map; + +@Slf4j +@RestController +public class HelloController { + + final Car car; + + public HelloController(Car car) { + this.car = car; + } + + /** + * application/octet-stream 形式上传图片 + * + * @param bytes 图片数据 + * @return success + */ + @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) + public String getPicFile(@RequestBody byte[] bytes, HttpServletRequest request) { + log.info("this image name is [{}]", request.getContentType()); + try (FileOutputStream fileOuputStream = new FileOutputStream("image.jpg")){ + fileOuputStream.write(bytes); + log.info("save image success"); + } catch (IOException e) { + throw new RuntimeException(e); + } + return "SUCCESS"; + } + + /** + * image/jpeg 形式上传图片 + * + * @param bytes 图片字节流 + * @param request 请求 + * @return 200ok + */ + @RequestMapping(value = "/vi/snap/uploadFile", method = RequestMethod.POST) + public int getImage(@RequestBody byte[] bytes, HttpServletRequest request) { + log.info("ContentType : {}", request.getContentType()); + try (FileOutputStream fileOuputStream = new FileOutputStream("snap.jpg")){ + fileOuputStream.write(bytes); + log.info("save snap image success"); + } catch (IOException e) { + throw new RuntimeException(e); + } + return Response.SC_OK; + } + + /** + * hashMap 转化成表单字符串 + * + * @param map 图片数据 + * @return 字符串 + */ + public static String map2Form(Map map) { + StringBuilder stringBuilder = new StringBuilder(); + if (map == null) { + return stringBuilder.toString(); + } else { + for (Map.Entry entry : map.entrySet()) { + stringBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); + } + return stringBuilder.substring(0, stringBuilder.length() - 1); + } + } + + @RequestMapping("/hello") + public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { + return String.format("Hello, %s!", name); + + } +}