如何拦截urlrewrite之后真实的URL地址?

山哥 发布于 2010/07/22 10:36
阅读 2K+
收藏 6

大家好,

 我的系统中使用Filter 来拦截URL 进行相关的资源访问权限判断, 后来我加入了 urlrewrite,发现我之前的Filter 拦截的URL不正确了,拦截到的都是 urlrewrite中定义的from中的URL了,不是真实的 to 中的 URL 了,如何才能让我的 Filter 拦截到真实的 to 中的 URL 呢?

加载中
0
鉴客
鉴客

一般 urlrewrite 是使用 RequestDispatcher 来 include 或者 forward 到目标页面的

可使用如下代码来获取最终的页面URI

request.getAttribute("javax.servlet.forward.request_uri");

0
山哥
山哥

引用来自#2楼“贱客”的帖子

一般 urlrewrite 是使用 RequestDispatcher 来 include 或者 forward 到目标页面的

可使用如下代码来获取最终的页面URI

request.getAttribute("javax.servlet.forward.request_uri");

我测试下了,不行啊,获取的是 null, 我用的OSChina中的开源项目: urlrewrite, 我的Filter中:

public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain )
{
    HttpServletRequest request = (HttpServletRequest)req;

    System.out.println( request.getRequestURI +" # "+ request.getAttribute("javax.servlet.forward.request_uri") );

    chain.doFilter( req, res );
}

0
红薯
红薯

你这 filter 是哪里的?是 urlrewrite 里的,还是你自己的?

把你的情况详细说明白一些吧

0
puxc
puxc

filter顺序

0
山哥
山哥

引用来自#4楼“红薯”的帖子

你这 filter 是哪里的?是 urlrewrite 里的,还是你自己的?

把你的情况详细说明白一些吧

是我自己的Filter, web.xml中的配置是:

 

<filter>
     <!-- 这里配置的是 urlrewrite的 Filter  org.tuckey.web.filters.urlrewrite.UrlRewriteFilter  -->
</filter>

<filter>
     <filter-name>PermissionFilter</filter-name>
     <filter-class>com.my.filters.PermissionURLFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PermissionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

urlrewrite.xml的规则是:

 

<rule>
    <from> /user/([0-9]+)_([a-zA-Z0-9]+) </from>
    <to> /user/User!detail.action?id=$1&amp;key=$2 </to>
</rule>

 

测试页面:

<a href="/user/20_e11a9de23afd9">查看用户信息</a>

然后,点击链接 PermissionURLFilter 中获取不到真实的 URI, 我交换了 web.xml 的 Filter 配置,也一样无法获取。

0
红薯
红薯

引用来自#5楼“puxc”的帖子

filter顺序

这一点也非常重要,必须的!

0
山哥
山哥

引用来自#7楼“红薯”的帖子

引用来自#5楼“puxc”的帖子

filter顺序

这一点也非常重要,必须的!

没用啊,我交换了它们的顺序,结果还是一样获取不到,很奇怪。

同时我也打印了  Enumeration em = request.getAttributesNames();   没有任何信息,是空的

0
山哥
山哥

我新建了一个空的 J2EE 的 web project,里面只有2个jsp页面, 一个PermissionURLFilter , 外加 urlrewrite , 

index.jsp 的内容:<a href="/user/20_e11a9de23afd9">查看用户信息</a>

user.jsp 的内容:

<h1>UserID = <%=request.getParameter("id") %></h1>

<h1>Key = <%=request.getParameter("key") %></h1>

在 PermissionURLFilter 中获取 request.getAttribute("javax.servlet.forward.request_uri") 仍然获取不到的, 大家帮忙看看啊

0
红薯
红薯

没法看了,你提供的信息只有这么多,诊断到此结束:)

0
阿影
阿影

<filter-mapping>

        <filter-name>UrlRewriteFilter</filter-name>

        <url-pattern>/*</url-pattern>

        <dispatcher>REQUEST</dispatcher>

        <dispatcher>FORWARD</dispatcher>

</filter-mapping>

你的拦截Filter Mapping放到URLRewriteFilter之后。如果用的是Struts2的话,后面的Mapping都需要配上

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

sitemesh 再加上一个<dispatcher>INCLUDE</dispatcher>

返回顶部
顶部