作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个在 Tomcat 上运行的应用程序。在任何请求到达我们的服务器之前,它都会通过一个网关。此网关添加了一个名为 request-id 的自定义 http header 。这就是我们在整个子系统中跟踪请求的方式。
有时网关可能无法添加此 header 。在那种情况下,我想知道我是否可以编写一个过滤器或其他一些东西来添加这个标题,如果它丢失并将值设置为 UUID。这样我的业务逻辑就不必担心请求 ID 会丢失。
我已经在网上搜索过,但还没有找到任何东西。
最佳答案
你问这个问题已经很久了,但最近我遇到了同样的情况,我必须检测请求是否有 Coookie
标题,否则添加 Set-Cookie
带有 SameSite=None
的标题.我用过滤器实现了这一点。就我而言,每个请求或响应都必须分别具有 Cookie 或 Set-Cookie header 。
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;";
}
web.xml(应用程序端)
<filter>
<filter-name>SameSiteCookieHeaderFilter</filter-name>
<filter-class>de.chemmedia.kw.core.filter.SameSiteCookieHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SameSiteCookieHeaderFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
仅供引用:Tomcat 7.0.104、Servlet 3.1 和 Spring 4.2.x
关于tomcat - 如何在Tomcat中添加自定义 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972782/
我是一名优秀的程序员,十分优秀!