过滤器 - 忽略除欢迎文件之外的其他请求

时间:2013-08-28 09:27:31

标签: java jsp filter web.xml

我写了一个过滤器来确定用户登陆页面,然后才能到达我的欢迎文件。欢迎文件的编写方式使得它从过滤器获取输入并将用户导航到特定页面。

我的欢迎文件标签是......

<welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

我的过滤器配置是

<filter>
    <filter-name>LandingPageFilter</filter-name>
    <filter-class>com.mypack.test.filters.LandingPageFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>LandingPageFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

上述格式运行良好,而每个请求都通过此过滤器,我想避免。当我点击http://localhost:8000/landing时,它应该首次到达过滤器,之后即使我访问http://localhost:8000/landing/edit它也应该绕过过滤器实际执行相关的servlet。

我也试过<url-pattern>/*/index.jsp</url-pattern>,但没有用。为什么我使用它,因为上下文可能会有所不同,但应用程序会相同。

1 个答案:

答案 0 :(得分:2)

使用

<url-pattern>/index.jsp</url-pattern>

而不是

<url-pattern>/*/index.jsp</url-pattern>

所以你的过滤器映射部分会变成这样的

<filter-mapping>
    <filter-name>LandingPageFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>

无论上下文如何都有效,因为/表示上下文路径之后的路径。

例如,如果您有两个上下文路径,说明 a b ,并且服务器中有两个相同应用程序的部署,并且您使用URL访问它们

http://localhost:8000/a/

http://localhost:8000/b/

然后/中的url-pattern在上下文根/a之后代表b。所以你的过滤器只会为index.jsp执行。