过滤器如何处理会话

Posted

技术标签:

【中文标题】过滤器如何处理会话【英文标题】:how Filters handle Session 【发布时间】:2013-12-15 17:48:50 【问题描述】:

你们中的一些人建议我使用过滤器处理会话。我根据互联网上的一些指南对过滤器进行了一些研究,并写了一个过滤器引用这个guide。

我看到我的页面的每个组件(css、图像等)都调用了过滤器;有没有办法在加载 jsp 或 servlet 时调用它?我需要一种可以了解是否加载了 jsp 或 servlet 的方法,以便在我的过滤器中制作一些东西。

【问题讨论】:

【参考方案1】:

是的,你可以这样做。只需更改您的会话过滤器的url-pattern

如果您正在使用带有一个调度 servlet 的某些 Web 框架(spring mvc,...),您可以使用 servlet-name 将您的过滤器仅映射到此 servlet,并且不会拦截对其他资源(js、css)的请求通过这个过滤器。

【讨论】:

这意味着如果我有一百万个 servlet 我应该有一百万个 servlet-name 标记对吗? 没有必要。将过滤器映射到 servlet 时有两种选择:可以指定 url-pattern 或 servlet-name。但是您希望将过滤器映射到除静态资源 URL 之外的所有 URL。因此,如果您只有一个 servlet,则 servlet-name 可能是一种更简单的方法。如果你有多个 servlet,url-pattern 可能会更容易。 如果您有一个简单的 Web 应用程序,其中所有 servlet 都在处理或生成 html,并且这些资源的所有 URL 都类似于 .htm,那么您可以简单地使用一个 url 映射您的会话过滤器-pattern=".htm"【参考方案2】:

首先,请不要被您指定的链接中教程的目的所误导。会话处理总是通过 cookie、URL 重写(或更高级的 SSL)来完成。他只是使用过滤器来增强应用程序安全性,通过确保用户在直接进入“avoid-url”时被重定向到登录页面。

想想一个过滤器,一个物理过滤器。无论是 Excel 过滤器还是物理砾石过滤器。它介于一件事和另一件事之间:

Java 网络过滤器可以做同样的事情:

就像您可以选择过滤哪个水瓶一样,您也可以决定要过滤哪些请求。您可以使用 web.xml 中的 filter-mapping 元素来执行此操作。您可以指定单个 servlet 名称或 url 模式。

【讨论】:

以上是关于过滤器如何处理会话的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring 和 hibernate 时,如何处理会话/事务?

如何在JS数组的顶部索引处过滤匹配的元素

在第一个结果处停止的 JavaScript 过滤器

web.xml配置编码过滤器

Spring Security +自定义用户对象附加到会话以过滤请求

为啥多处理会减慢嵌套的 for 循环?