【发布时间】:2022-01-20 10:06:46
【问题描述】:
我有一个 CookieFilter 类,它覆盖 doFilter 方法以在调用我的 Rest 服务之前设置 Cookie:
import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;
public class CookieFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
if (notPresent("TEST")) {
String uuid = UUID.randomUUID().toString();
httpResponse.addCookie(new Cookie("TEST", uuid));
}
chain.doFilter(request, response);
}
@Override
public void destroy() {}
private boolean notPresent(String cookieName) {
// here are the checks
}
}
休息服务方式:
void myRestServiceMethod(@Context HttpServletRequest request) {
Cookie[] cookies = request.getCookies(); // has my cookie inside after second call
// other logic bellow
}
myRestServiceMethod 在 doFilter 之后被调用,但 Cookie 不存在。
但是,我能够在对 myRestServiceMethod 的第二次客户端调用中读取 cookie(使用 JAX-RS @Context 检索 HttpServletRequest 对象),其中 Cookie(在第一次调用中设置)从客户端发送并传递到服务器。
我的问题是:有没有办法在 doFilter 中设置后第一次调用 myRestServiceMethod 时读取 Cookie?
【问题讨论】: