ServletRequest 中的会话变量

Posted

技术标签:

【中文标题】ServletRequest 中的会话变量【英文标题】:Session variables in ServletRequest 【发布时间】:2013-02-07 05:18:26 【问题描述】:

我需要通过过滤器访问会话变量。我什至不知道这是否可能。实际上,问题是javax.Servlet.Filter实现中的doFilter方法类型是ServletRequest,而HttpServlet继承类,doPost方法参数request是HttpServletRequest。

    我可以在过滤器中访问 ServletRequest 中的会话吗? 我应该这样做吗? 你能推荐我什么?

谢谢!

【问题讨论】:

HttpServletRequest request = (HttpServletRequest) methodRequest; 您可以将 doFilter 请求转换为 HttpServletRequest 【参考方案1】:

只需将获得的ServletRequest 转换为HttpServletRequest即可。

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException 
    HttpServletRequest request = (HttpServletRequest) req;
    HttpSession session = request.getSession(false);
    // ...

另见:

Our servlet-filters wiki page

【讨论】:

你说得对。我经常将ServletRequest 转换为HttpServletRequest 以至于忘记提及这一点。【参考方案2】:

当然可以。 ServletRequest 允许您访问包含属性的会话。您可以在过滤器、servlet、jsp、会话侦听器中随时查看、添加、删除和修改属性。这种技术非常有用,尤其适用于同一会话中不同组件之间的通信。

【讨论】:

The ServletRequest interface 没有 getSession() 方法。否则 OP 不会首先问这个问题。

以上是关于ServletRequest 中的会话变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的默认会话时间和路径是什么。如何改变?

PHP中的默认会话时间和路径是什么。如何改变?

JSP中的9大内置对象四大域与servlet里的三大域

javaWEB中的ServletRequest,ServletResponse的使用,及简化Servlet方法

Codeigniter 中的会话变量不工作

打印JSP页中的所有ServletRequest属性