code: public static View handle(WxHandler wxHandler, HttpServletRequest req, String key)
              throws IOException {
          if (wxHandler == null) {
              log.info("WxHandler is NULL");
              return HttpStatusView.HTTP_502;
          }
          String signature = req.getParameter("signature");
          String timestamp = req.getParameter("timestamp");
          String nonce = req.getParameter("nonce");
          String msg_signature = req.getParameter("msg_signature");
          String encrypt_type = req.getParameter("encrypt_type");
          if (!wxHandler.check(signature, timestamp, nonce, key)) {
              log.info("token is invalid");
              return HttpStatusView.HTTP_502;
          }
          if ("GET".equalsIgnoreCase(req.getMethod())) {
              String echostr = req.getParameter("echostr");
              log.info("GET? return echostr=" + echostr);
              return new ViewWrapper(new RawView(null), echostr);
          }
          String postData = Streams.readAndClose(new InputStreamReader(req.getInputStream(),
                                                                       Encoding.CHARSET_UTF8));
  
          if ("aes".equals(encrypt_type)) {
              WXBizMsgCrypt msgCrypt = wxHandler.getMsgCrypt();
              try {
                  // 若抛出Illegal key size,请更新JDK的加密库为不限制长度
                  postData = msgCrypt.decryptMsg(msg_signature, timestamp, nonce, postData);
              }
              catch (AesException e) {
                  return new HttpStatusView(403);
              }
          }
          WxInMsg in = Wxs.convert(postData);
          in.setExtkey(key);
          WxOutMsg out = wxHandler.handle(in);
          if (out != null) {
              Wxs.fix(in, out);
          }
          return new ViewWrapper(WxView.me, out);
      }
docs: 用一个wxHandler处理对应的用户请求