#google-chrome #tomcat #cookies
Вопрос:
В одном из наших приложений у нас есть междоменные файлы cookie, которые не работают в chrome, поскольку эти файлы cookie небезопасны, а также не только HTTP. Этот файл cookie был сгенерирован инструментом, и у нас нет особого контроля над этим.
Мы испробовали несколько способов преодоления этой проблемы.
- Попытался установить нижеприведенную конфигурацию в web.xml файл, но он не работает, так как он не был в сеансе.
<session-config> <session-timeout>60</session-timeout> <cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config> </session-config>
- Попробовал с
<CookieProcessor sameSiteCookies="none" />
в context.xml тоже и с другими атрибутами не повезло.
Пожалуйста, найдите прилагаемое изображение для справки.
Ответ №1:
<cookie-config>
Это относится только к файлу cookie, используемому для установления сеанса ( JSESSIONID
по умолчанию).
Если ваши приложения устанавливают файлы cookie без атрибутов secure
и httpOnly
, вы можете исправить это с помощью Filter
:
public class SecureCookieServletFilter implements Filter {
private static class SecureCookieResponseWrapper extends HttpServletResponseWrapper {
public SecureCookieResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void addCookie(Cookie cookie) {
cookie.setSecure(true);
cookie.setHttpOnly(true);
super.addCookie(cookie);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// NOP
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
final ServletResponse response = res instanceof HttpServletResponse ? new SecureCookieResponseWrapper((HttpServletResponse) res) : res;
chain.doFilter(req, response);
}
@Override
public void destroy() {
// NOP
}
}
Конечно, вы можете реализовать ту же логику в обычае CookieProcessor
, но это будет сложнее распространять.