Java EE 过滤器无法获取 cookie?

Posted

技术标签:

【中文标题】Java EE 过滤器无法获取 cookie?【英文标题】:Java EE Filters not able to get cookies? 【发布时间】:2010-11-13 12:16:49 【问题描述】:

为什么不能从 servlet 过滤器中引用 cookie? Java EE 不允许您清理 cookie 值,这似乎超出了我的理解:

public void doFilter(ServletRequest request, ServletResponse response, 
                             FilterChain chain) 
                             throws ServletException, IOException 
    request.

ServletRequest 不支持 getCookies(与 HttpServletRequest 一样)。

【问题讨论】:

【参考方案1】:

不需要通过 HTTP 协议访问 Servlet。因此,您的 servlet 不必是 HttpServlet - 例如,它可以是通过 FTP 发送特定文档的 servlet。因此,servlet 的基本属性都封装在 ServletRequest 和 ServletResponse 接口中,但是如果您知道您的 servlet 是 HTTPServlet,则可以将它们分别向下转换为 HttpServletRequest 和 HttpServletResponse,只要您的 Servlet 就不会出现 ClassCastException是真正的 HttpServlet。

【讨论】:

【参考方案2】:

为了获取 cookie,您需要将其转换为 HttpServletRequest

HttpServletRequest httpReq = (HttpServletRequest) request;

ServletResponse 类不支持 cookie 的原因是因为 ServletRequest 中的协议不一定是 http,你不能确定有 cookie。 Cookie 是一种 Http 的东西。

【讨论】:

【参考方案3】:

您确实知道您实际上可以将其转换为HttpServletRequest,对吗? :-)

【讨论】:

以上是关于Java EE 过滤器无法获取 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

J2EE 过滤器:登录页面无法加载 css 或任何图像

使用 java EE 6 注释的 Servlet 过滤?

Java EE 之 过滤器入门学习与总结

Java 8 & 缺少所需的能力 Require-Capability: osgi.ee;过滤器="(&(osgi.ee=JavaSE)(版本=1.8))"

过滤器或阶段列表器是在 Java EE 6 中实现安全性的好方法吗?

cookiesession和java过滤器