springboot 添加请求头(反射实现)

我会带着你远行 2023-07-17 07:22 96阅读 0赞

springboot 添加请求头(反射实现)

#

******************************

相关类及接口

org.apache.catalina.connector.RequestFacade

  1. public class RequestFacade implements HttpServletRequest {
  2. protected Request request = null;
  3. protected static final StringManager sm = StringManager.getManager(RequestFacade.class);
  4. public RequestFacade(Request request) {
  5. this.request = request;
  6. }

org.apache.catalina.connector.Request

  1. public class Request implements HttpServletRequest {
  2. private static final Log log = LogFactory.getLog(Request.class);
  3. protected org.apache.coyote.Request coyoteRequest;

org.apache.coyote.Request

  1. public final class Request {
  2. private final MimeHeaders headers = new MimeHeaders();

org.apache.tomcat.util.http.MimeHeaders

  1. public class MimeHeaders {
  2. ***************
  3. 相关方法
  4. public void removeHeader(String name) {
  5. public MessageBytes addValue(String name) {

org.apache.tomcat.util.buf.MessageBytes

  1. public final class MessageBytes implements Cloneable, Serializable {
  2. public void setString(String s) {

******************************

示例

**********************

filter 层

CustomFilter

  1. @Component
  2. public class CustomFilter implements HandlerInterceptor {
  3. @Override
  4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  5. Map<String,String> map=new HashMap<>();
  6. map.put("name","瓜田李下");
  7. addHeader(request,map);
  8. return true;
  9. }
  10. private void addHeader(HttpServletRequest request, Map<String,String> headerMap){
  11. if (headerMap==null||headerMap.isEmpty()){
  12. return;
  13. }
  14. Class<? extends HttpServletRequest> c=request.getClass();
  15. System.out.println(c.getName());
  16. try{
  17. Field requestField=c.getDeclaredField("request");
  18. requestField.setAccessible(true);
  19. Object o=requestField.get(request);
  20. Field coyoteRequest=o.getClass().getDeclaredField("coyoteRequest");
  21. coyoteRequest.setAccessible(true);
  22. Object o2=coyoteRequest.get(o);
  23. Field headers=o2.getClass().getDeclaredField("headers");
  24. headers.setAccessible(true);
  25. MimeHeaders mimeHeaders=(MimeHeaders) headers.get(o2);
  26. for (Map.Entry<String,String> entry:headerMap.entrySet()){
  27. mimeHeaders.removeHeader(entry.getKey());
  28. mimeHeaders.addValue(entry.getKey()).setString(entry.getValue());
  29. }
  30. }catch (Exception e){
  31. e.printStackTrace();
  32. }
  33. }
  34. }

**********************

config 层

WebMvcConfig

  1. @Configuration
  2. public class WebMvcConfig implements WebMvcConfigurer {
  3. @Resource
  4. private CustomFilter customFilter;
  5. @Override
  6. public void addInterceptors(InterceptorRegistry registry) {
  7. registry.addInterceptor(customFilter).addPathPatterns("/hello");
  8. }
  9. }

**********************

controller 层

HelloController

  1. @RestController
  2. public class HelloController {
  3. @RequestMapping("/hello")
  4. public String hello3(HttpServletRequest request){
  5. String name=request.getHeader("name");
  6. if (name!=null){
  7. System.out.println(name);
  8. }
  9. return "hello world";
  10. }
  11. }

************************

控制台输出

  1. org.apache.catalina.connector.RequestFacade
  2. 瓜田李下

发表评论

表情:
评论列表 (有 0 条评论,96人围观)

还没有评论,来说两句吧...

相关阅读