3

我正在使用 Tuckey 的 URL 重写过滤器和自制的安全过滤器。

  • URL 重写过滤器被映射到/*
  • 安全过滤器映射到“/*”

此外,URL 重写过滤器具有以下规则:

<rule>
    <name>User</name>
    <from>^/user/$</from>
    <to>/user.do</to>
</rule>

对于像这样的请求:myapp/user/我期待这个流程:

  1. 由 URL 重写过滤器映射。请求 URL(或 Servlet 路径)变为user.do
  2. 由安全过滤器映射。验证和重定向
  3. 到达映射到user.do的控制器

但是,无论何时 Tuckey 的 URL 重写应用规则,都会以某种方式跳过第二步。这会导致非常不愉快的行为,例如在没有适当身份验证的情况下访问受保护的页面。

有什么我错过的吗?我应该期待另一种行为吗?

4

2 回答 2

3

发生这种情况是因为通常 urlrewritefilter 不会重定向 url。它只是在内部转发它。尝试添加 type="redirect" 作为属性,您的安全过滤器将捕获重定向的请求。

<rule>
    <name>User</name>
    <from>^/user/$</from>
    <to type="redirect">/user.do</to>
</rule>

这以前对我有用。

于 2012-11-28T01:52:37.037 回答
1

如果你做type="redirect"客户端将被发出一个 302“临时重定向”状态,最终将浏览器重定向到新的 url。

如果您希望用户仍然在浏览器的地址行中看到旧的“来自”网址,请尝试将这些添加到您的“安全”过滤器中:

    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>    
于 2014-05-20T03:48:43.237 回答