特定 url 的过滤器映射

Posted

技术标签:

【中文标题】特定 url 的过滤器映射【英文标题】:filter mapping for particular url 【发布时间】:2014-11-16 00:48:38 【问题描述】:

ExpiryFilter.java

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class ExpiryFilter implements Filter 

    // add a five years expiry
    private Integer years = 1;

    @Override
    public void destroy() 
    

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException 
        if (years > -1) 
            Calendar c = Calendar.getInstance();
            c.setTime(new Date());
            c.add(Calendar.YEAR, years);

            // HTTP header date format: Thu, 01 Dec 1994 16:00:00 GMT
            String o = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss zzz")
                    .format(c.getTime());
            ((HttpServletResponse) response).setHeader("Expires", o);
        

        chain.doFilter(request, response);
    

    @Override
    public void init(FilterConfig filterConfig) throws ServletException       
    

我正在创建一个 Web 应用程序,我想给出有效期。所以我使用过滤器进行映射。

web.xml

<filter>
    <description>Set cache expiry for static content</description>
    <filter-name>ExpiryFilter</filter-name>
    <filter-class>ExpiryFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>ExpiryFilter</filter-name>
    <url-pattern>/ExpiryDate/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

这是我的本地主机链接http://localhost:8080/ExpiryDate/test.jsp. 一年后我需要过滤。一年或特定时间段后,该特定链接无法运行。所以请帮我找出解决方案。

谢谢。

【问题讨论】:

【参考方案1】:

由于它是一页,只需检查 JSP 页面开头的两个日期(您指定的开始日期和请求的日期)的差异 变成这样的比索代码

if (difference is one year )
<body>
link is expired
</body>
else
<body>
//what ever data you show
</body>

【讨论】:

只有当我映射 *.jsp 时它才会正确过期,但它会像 gmail 等一样过期,所以我只需要那个特定的 url,所以请指导我编码或显示链接 当然,每次对 URL 模式的请求都会过期,所以你的意思是你只想让一页过期? 是的,绝对是 localhost:8080/ExpiryDate/test.jsp 这个特定的链接我想过期 查看我的更新答案在这种情况下不需要过滤器 那么问题会在一年后出现,每个链接都会过期。只有当我们使用 if else 时,我才需要那个特定的 url,那么同样的概率也会出现。

以上是关于特定 url 的过滤器映射的主要内容,如果未能解决你的问题,请参考以下文章

HBase的布隆过滤器

排除子目录的过滤器映射 url 模式

Servlet 过滤器 url 映射

具有相同 url 映射的多个过滤器

如何使用映射或过滤器而不是列表推导过滤特定值的嵌套字典(pythonic 方式)?

如何在过滤器映射中排除 url [重复]