【问题标题】:Modifying response content in Spring security filter [duplicate]在 Spring 安全过滤器中修改响应内容 [重复]
【发布时间】:2018-01-18 07:50:21
【问题描述】:

我想更改 Spring Security 过滤器中响应的内容。假设我想要的如下:

public class SecurityFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        filterChain.doFilter(request, response);

        //response.getWriter().write("a" );
        PrintWriter p = new PrintWriter(response.getOutputStream());
        p.println("Hello");
        p.flush();
        p.close();
    }
}

过滤器后面是一个 REST 服务,它检索字符串列表。 如果我使用 getOutputStream() 来编写,那么我可以在客户端上的字符串列表(而不是字符串'Hello')。如果我使用 getWriter() 则会收到以下错误:

2017-08-10 09:10:42,900 ERROR [org.springframework.boot.web.support.ErrorPageFilter] (default task-7) Forwarding to error page from request [/worker/system/urmlprod30] due to exception [UT010006: 
Cannot call getWriter(), getOutputStream() already called]: java.lang.IllegalStateException: UT010006: Cannot call getWriter(), getOutputStream() already called

如何修改 Spring Security 过滤器中的响应内容? 顺便说一句,我使用 wildfly10,但它也应该适用于 Tomcat 和 Weblogic12c。我使用 Spring Boot。

securityContext.xml中的相关部分:

    <security:csrf disabled="true" />
        <security:custom-filter ref="securityFilter" after="FORM_LOGIN_FILTER"/>
    </security:http>

当我想写我的内容时,我认为响应已经发送,但我能做些什么呢?

任何回复将不胜感激!

谢谢,V。

-----更新------ 我忘了提到我需要来自 REST 服务的响应,因为我想操作它。

【问题讨论】:

  • 很好,它正在工作!我记得我试过这个 HttpServletResponseWrapper 但我得到了错误......无论如何,谢谢!

标签: java spring spring-boot spring-security servlet-filters


【解决方案1】:

您可以按照here 的说明使用HttpServletResponseWrapper

【讨论】:

  • 感谢您的回复!我忘了提到 (...) 我需要来自 REST 服务的响应,因为我想操作它。
  • 请看一下this,因为它看起来像是您可以使用的东西。
  • HttpServletResponseWrapper 工作了吗?那你的评论发错地方了。也许我们应该更新答案以供将来参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2012-02-29
  • 2020-07-21
  • 2016-05-07
  • 2019-12-27
  • 1970-01-01
  • 2017-06-09
相关资源
最近更新 更多