Filter经典案例

回到首页☞

写在前面:

  • 1、核心是真正的认知request和response。
  • 2、完全自由的自定义response
  • 3、Filter本身的功能和配置

Filter的特性使它可以处理特殊的工作,例如权限验证,日志记录,数据压缩,数据加密,格式转换,图像处理等。

1、防盗链Filter

这个生产就用到了,因为OS资源入侵,通过窜改文件下载路径,去下载其它文件。

这个实力就是静态资源图片的 应用,在引用的时候通过Filter校验request中url是不是本网站的。

  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
   
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) resp;
    String referer = request.getHeader("referer");
    if (referer == null || !referer.contains(request.getServerName())) {
   
      request.getRequestDispatcher("/error.gif").forward(request, response);
    } else {
   
      chain.doFilter(req, resp);
    }
  }

大体逻辑如上,我们可以在这里校验用户的下载路径等等操作,从而防止他们用相对路径切换到root核心文件资源。
web.xml配置通过通配符,拦截所有静态资源即可。

2、字符编码Filter

字符编码Filter是最常见的Filter之一,常用来解决Tomcat等服务器里request,response乱码的问题。

package com.wht.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 解决乱码问题
 *
 * @author JDIT
 */
@WebFilter(filterName = "CharacterEncodingFilter")
public class CharacterEncodingFilter implements Filter {
   
  private String characterEncoding;

  public void init(FilterConfig config) throws ServletException {
   
    characterEncoding = config.getInitParameter("characterEncoding");
  }

  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
   
    if (null != characterEncoding) {
   
      req.setCharacterEncoding(characterEncoding);
      resp.setCharacterEncoding(characterEncoding);
    }
    chain.doFilter(req, resp);
  }

  public void destroy() {
   
  }

}

<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>com.wht.demo.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>characterEncoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值