我们在Tomcat上运行了一个应用程序。在任何请求到达我们的服务器之前,它通过网关。此网关添加一个名为request-id的自定义http标头。这就是我们如何通过子系统跟踪请求。
有时gw可能无法添加此标头。在那种情况下,我想知道我是否可以编写一个过滤器或其他一些东西,如果它丢失则添加此标头并将值设置为UUID。这样我的业务逻辑就不必担心请求ID丢失了。
我在google上搜索过但还没有找到任何内容。
任何帮助都非常感激。
答案 0 :(得分:2)
在我发布此问题后,我在谷歌上找到了答案。我以为我会在这里分享。
答案是Java Servlet Filter。我发现以下链接超级有用:
http://viralpatel.net/blogs/tutorial-java-servlet-filter-example-using-eclipse-apache-tomcat/
答案 1 :(得分:0)
问了这个问题已经很久了,但是最近我遇到了相同的情况,我必须检测请求是否具有Coookie
标头,否则,请在Set-Cookie
标头中添加{{ 1}}。我已经用过滤器实现了。就我而言,每个请求或响应都必须分别具有Cookie或Set-Cookie标头。
SameSite=None
web.xml(应用程序端)
public class SameSiteCookieHeaderFilter implements Filter {
private static final String LOCALE_ID_COOKIE = "locale";
private static final String SET_COOKIE_HEADER = "Set-Cookie";
@Override
public void destroy() {
}
@Override
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
final FilterChain filterChain) throws IOException, ServletException {
final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
final HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
final Collection<String> setCookieHeaders = httpServletResponse.getHeaders(SET_COOKIE_HEADER);
for (final String setCookieHeader : setCookieHeaders) {
httpServletResponse.addHeader(SET_COOKIE_HEADER, setCookieHeader + "; Secure; SameSite=None");
}
if (setCookieHeaders.size() == 0) {
final Cookie[] cookies = httpServletRequest.getCookies();
for (final Cookie cookie : cookies) {
if (cookie.getName().equals(LOCALE_ID_COOKIE)) {
httpServletResponse.addHeader(SET_COOKIE_HEADER, buildSessionIdCookie(cookie.getValue()));
}
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
private String buildSessionIdCookie(final String value) {
return LOCALE_ID_COOKIE + "=" + value + "; " + "Path=/; " + "SameSite=None; " + "Secure; HttpOnly;";
}
仅供参考:Tomcat 7.0.104,Servlet 3.1和Spring 4.2.x
我希望我的回答对某人有帮助>