修改Spring安全过滤器中的响应内容

时间:2017-08-10 07:37:27

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

我想在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()来编写,那么我可以在客户端上使用字符串列表(而不是String' 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。

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

1 个答案:

答案 0 :(得分:1)

您可以按照here所述使用HttpServletResponseWrapper