过滤器-自己使用

/**
 * 任意请求转发处理过滤器
 */
@Component
public class RequestTransmitFilter implements Filter {

  @Autowired
  private OkHttpHelper okHttpHelper;

  /**
   * springboot初始化bean的顺序为:listener -> filter -> servlet -> 普通bean
   * 所以无法在filter中注入普通的bean,只能通过init方法中手工进行bean注入
   *
   * @param filterConfig
   * @throws ServletException
   */
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    ServletContext servletContext = filterConfig.getServletContext();
    WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
    okHttpHelper = applicationContext.getBean(OkHttpHelper.class);
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {


    HttpServletRequest servletRequest = (HttpServletRequest) request;
    HttpServletResponse servletResponse = (HttpServletResponse) response;

    //设置响应头
    servletResponse.setCharacterEncoding("UTF-8");
    servletResponse.setContentType("application/json;charset=utf-8");
    //发起请求,获取响应
    OkResponseWrap okResponseWrap = this.okHttpHelper.execute((HttpServletRequest) request);
    PrintWriter out = null;

    try {
      out = servletResponse.getWriter();
      //设置响应
      if (!CollectionUtils.isEmpty(okResponseWrap.getHeaders())) {
        okResponseWrap.getHeaders().get("Set-Cookie").forEach(cookie -> {
          servletResponse.addHeader("Set-Cookie", cookie);
        });
      }
      servletResponse.setStatus(okResponseWrap.getCode());
      out.write(String.valueOf(okResponseWrap.getBody()));
      out.flush();
    } catch (Exception e) {
      //服务器异常
      e.printStackTrace();
    } finally {
      if (out != null) {
        out.close();
      }
    }
  }

  @Override
  public void destroy() {

  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值