当前位置: 首页 > 知识库问答 >
问题:

修改Spring安全过滤器中的响应内容 [重复]

贝凯
2023-03-14

我想在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安全过滤器中的响应内容?顺便说一句,我使用野蝇10,但它也应该适用于雄猫和Weblogic12c。我使用Spring靴。

securityContext.xml的相关部分:

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

我假设当我想写我的内容时,响应已经发送,但我该怎么办?

任何回应都将不胜感激!

谢谢,V.

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

共有1个答案

暨弘懿
2023-03-14

您可以按照此处所述使用响应包装器

 类似资料:
  • 我有下面的servlet过滤器。

  • 在检查完成之前,我是否必须在包装器中捕获一些东西以防止响应发送到客户机?

  • 我正在使用这个环境: Spring 4.0.5 Spring security 3.2.4 在我的环境中,我有一个SSO系统,我需要在这个系统中集成我的web应用程序。这个系统是私人产品。SSO机制的最终结果是在请求头中放置一个参数。所以我在申请中应该做的是: null 此场景类似于CAS集成场景;所以我从CAS集成着手;我写了我的自定义过滤器,我写了我的自定义入口点和处理请求所需的所有其他类,但

  • 如果有人能抛出关于如何修改以下播放框架日志过滤器(ref.play filters)以实现以下目标的指针,我将不胜感激: null

  • 我使用的是Spring rest api 4. x。我们要求根据请求参数过滤响应中的字段。 我的用户对象: 在这种情况下,我只需要返回请求参数“字段”中的字段。JSON输出应该只包含名字和姓氏。 有几种方法可以根据对象过滤Jackson中的字段。在我的例子中,我需要通过将字段列表传递给Jackson序列化器来动态过滤。 请分享一些想法。

  • 如何在链顶部的Spring Security链中插入多个自定义过滤器? 我可以通过在="FIRST"之后使用和之后尝试多个