为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免过滤器后在dispatcherServlet中关闭输入流

如何避免过滤器后在dispatcherServlet中关闭输入流

慕运维8079593 2021-04-05 16:13:35
我需要持久保存有关为应用程序发送的请求/响应的所有信息,例如http状态,当前时间,令牌,请求URI等。这是一个API,资源是:POST本地主机:8080 / v1 / auth / login,其中包含电子邮件和密码,以请求身份验证。响应是一个JWT令牌。GET localhost:8080 / v1 / auth / rules在请求标头中带有令牌。响应是包含有关令牌所有者的信息(例如电子邮件和名称)的正文。为此,我的方法重写了doDispatch方法:LogDispatcherServlet@Componentpublic class LogDispatcherServlet extends DispatcherServlet {    @Autowired    private LogRepository logRepository;    private static final Logger logger = LoggerFactory.getLogger(LogDispatcherServlet.class);    @Override    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {        if (!(request instanceof ContentCachingRequestWrapper)) {            request = new ContentCachingRequestWrapper(request);        }        if (!(response instanceof ContentCachingResponseWrapper)) {            response = new ContentCachingResponseWrapper(response);        }        HandlerExecutionChain handler = getHandler(request);        try {            super.doDispatch(request, response);        } finally {            try {                ApiLog log = ApiLog.build(request, response, handler, null);                logRepository.save(log);                updateResponse(response);            } catch (UncheckedIOException e) {                logger.error("UncheckedIOException", e);            } catch (Exception e) {                logger.error("an error in auth", e);            }        }    }  ApiLog.build负责获取有关请求的示例信息,并且 LogDispatcherServlet对于localhost:8080 / v1 / auth / rules中的GET可以正常工作。我最大的问题是:我正在使用Spring Security生成JWT令牌,因此发送到/ v1 / auth / login的所有请求都将重定向到过滤器。成功通过身份验证后,筛选器必须调用LogDispatcherServlet来持久保存请求和响应。有没有控制器用于/登录,只是JWTLoginFilter。但这不适用于/ login。当ApiLog尝试在getRequestPayload中获取请求正文时,我得到一个java.io.IOException:流已关闭为了避免这种情况我该怎么办?JWTLoginFilter也需要知道身份验证请求主体和LogDispatcherServlet,但在tryAuthentication中会调用request.getInputStream()。还有没有那么简单的解决方案?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信