servlet过滤器中的URL映射问题

时间:2010-09-29 15:22:54

标签: java servlets servlet-filters

我已经有两个过滤器,通常会检查有效的会话。如果会话有效,它将重定向到ExpenseDetailsManagement.html其他ExpenseManagementLogin.html。 web.xml配置看起来像

<filter>
    <filter-name>ExpenseAuthentication</filter-name>
    <filter-class>com.pricar.hibernate.ExpenseAuthentication</filter-class>
</filter>
<filter>
    <filter-name>ExpenseAuthenticationFilter</filter-name>
    <filter-class>com.pricar.hibernate.ExpenseAuthenticationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExpenseAuthentication</filter-name>
    <url-pattern>*/ExpenseDetailsManagement.html</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>ExpenseAuthenticationFilter</filter-name>
    <url-pattern>*/ExpenseManagementLogin.html</url-pattern>
</filter-mapping>

上述两项工作正常。

应用程序路径看起来像 http://localhost:8080/Hibernate/ExpenseManagementLogin.html

如果我尝试使用http://localhost:8080/Hibernate,则ExpenseManagementLogin.html正在加载 即使我有一个有效的会话。

为此我尝试了一些网址映射模式,例如Hibernate//Hibernate//* 它以无限循环或资源未找到错误结束。

我的网络应用只有两个HTML页面,一个用于登录,另一个用于应用程序。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

为什么使用两个过滤器?

删除ExpenseAuthentificationFilter。在最简单的情况下,将ExpenseManagementLogin.html文件放在战争的根目录中。 添加Servlet或JSP作为登录表单目标。 将页面ExpenseDetailsManagement.html配置为默认页面。

然后可能出现以下情况:

  • 用户致电http://localhost:8080/Hibernate
  • 服务器重定向到默认页面http://localhost:8080/Hibernate/ExpenseDetailsManagement.html
  • 当浏览器请求此页面时,将调用剩余的servlet过滤器。
  • 如果没有有效会话处于活动状态,则过滤器内部会重定向到http://localhost:8080/Hibernate/ExpenseManagementLogin.html
  • 用户填写登录表单并提交表单。在servlet或JSP页面(提交目标处理程序)中,检查登录名和密码,如果它有效,则发送重定向到http://localhost:8080/Hibernate/ExpenseDetailsManagement.html
  • 现在,当浏览器第二次请求此方时,servlet过滤器会看到有效会话并且什么都不做,以便可以传递受保护的页面。

您还可以使用JAAS来处理登录和身份验证。