我想在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服务的响应,因为我想操纵它。
您可以按照此处所述使用响应包装器
。
我有下面的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"之后使用和之后尝试多个