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、会话侦听器中随时查看、添加、删除和修改属性。这种技术非常有用,尤其适用于同一会话中不同组件之间的通信。
【讨论】:
TheServletRequest
interface 没有 getSession()
方法。否则 OP 不会首先问这个问题。以上是关于ServletRequest 中的会话变量的主要内容,如果未能解决你的问题,请参考以下文章