san*_*oid 19 java cookies servlets response
似乎HttpServletResponse没有公开任何方法来执行此操作.
现在,我正在向一个狡猾且不易理解的servlet添加一堆日志代码,试图找出它究竟是做什么的.我知道它设置了一堆cookie,但我不知道何时,为什么或什么.在servlet执行结束时只记录HttpServletResponse对象中的所有cookie会很好.
我知道cookie通常是浏览器的责任,我记得在.NET中没有办法做到这一点.只是希望Java可能会有所不同......
但如果这是不可能的 - 关于如何完成我想要做的事情的任何其他想法?
谢谢,一如既往.
ska*_*man 16
如果你正在完成日志记录,那么我建议编写一个实现,javax.servlet.Filter
它将提供HttpServletResponse
的包装在一个包装器中,允许你在过滤器执行后公开cookie.像这样的东西:
public class CookieLoggingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException ,ServletException {
ResponseWrapper wrappedResponse = new ResponseWrapper((HttpServletResponse) response);
filterChain.doFilter(request, wrappedResponse);
// use a real logger here, naturally :)
System.out.println("Cookies: " + wrappedResponse.cookies);
}
private class ResponseWrapper extends HttpServletResponseWrapper {
private Collection<Cookie> cookies = new ArrayList<Cookie>();
public ResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void addCookie(Cookie cookie) {
super.addCookie(cookie);
cookies.add(cookie);
}
}
// other methods here
}
Run Code Online (Sandbox Code Playgroud)
一个很大的警告:这不会向您显示哪些cookie被发送回浏览器,它只会向您显示应用程序代码添加到响应中的cookie.如果容器选择更改,添加或忽略这些cookie(例如,会话cookie由容器而不是应用程序处理),您将不会知道使用此方法.但这对你的情况可能无关紧要.
唯一可以确定的方法是使用像Live Http Headers for Firefox这样的浏览器插件,或者是一个中间人的HTTP日志代理.
aco*_*hen 10
我有同样的问题,我使用第三方库接受HttpServletResponse,我需要读回它在我的响应对象上设置的cookie.为了解决这个问题,我创建了一个HttpServletResponseWrapper扩展,在我拨打电话后为我公开这些cookie:
public class CookieAwareHttpServletResponse extends HttpServletResponseWrapper {
private List<Cookie> cookies = new ArrayList<Cookie>();
public CookieAwareHttpServletResponse (HttpServletResponse aResponse) {
super (aResponse);
}
@Override
public void addCookie (Cookie aCookie) {
cookies.add (aCookie);
super.addCookie(aCookie);
}
public List<Cookie> getCookies () {
return Collections.unmodifiableList (cookies);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用它的方式:
// wrap the response object
CookieAwareHttpServletResponse response = new CookieAwareHttpServletResponse(aResponse);
// make the call to the 3rd party library
String order = orderService.getOrder (aRequest, response, String.class);
// get the list of cookies set
List<Cookie> cookies = response.getCookies();
Run Code Online (Sandbox Code Playgroud)
您唯一的方法是包装HttpServletResponse对象,以便addCookie方法可以在设置cookie时拦截和记录.您可以通过添加ServletFilter来实现此目的,该ServletFilter在将现有HttpServletResponse传递到您的Servlet之前将其包装起来.
归档时间: |
|
查看次数: |
27560 次 |
最近记录: |