0

在我们的应用程序中,我们使用 cookie 来设置经过身份验证的 SAML 令牌和其他信息。这种方法几乎适用于所有场景。

但是,如果客户拥有非常长的私钥和证书,则生成的 SAML 令牌超出了 cookie 可以处理的大小,因此 cookie 会在超过 4K 限制时丢弃这些值。

我们认为的方法是将 cookie 分解为多个 cookie,这样一个会破坏 SAML 令牌,其他 cookie 将保存用户信息等。这样做没什么大不了的,因为我们只需要创建多个 cookie。

但是故事的转折就在这里,我们的应用程序使用了一个框架,该框架需要具有特定名称的 cookie 和其中设置的所有值。当我们考虑将值分解为多个 cookie 时,进一步的请求会失败。

我想有一个过滤器,它将拦截所有请求并将多个 cookie 值合并为一个,并按预期将其提供给框架。

  • 这是一个正确的方法吗
  • 如果是这样,是否有任何实用程序会将 cookie 合并为一个并将其设置回请求,以便框架可以继续处理请求
4

1 回答 1

2

您确实可以HttpServletRequest#getCookies()使用自定义实现来装饰/包装,该实现返回带有所需 cookie 的数组。您可以在HttpServletRequestWrapper.

基本上,它在过滤器中应该如下所示:

chain.doFilter(new HttpServletRequestWrapper(request) {
    @Override
    public Cookie[] getCookies() {
        Cookie[] originalCookies = super.getCookies();

        // Loop, check, merge, create new Cookie[].
        // ...

        return newCookies;
    }
}, response);

您甚至可以这样做,HttpServletResponse#addCookie()以便自动捕获和拆分具有长值的 cookie。你可以用HttpServletResponseWrapper同样的方法来做到这一点。

于 2013-09-06T13:06:39.367 回答