java过滤器拦截地址,java过滤器,java过滤器和拦截器的区别

Java过滤器是客户端请求与服务器资源之间的一个拦截层,常用于登录验证、权限控制、字符编码转换等。过滤器通过doFilter方法执行,按照在web.xml中的配置顺序进行。在配置过滤器时,应注意监听器、过滤器和servlet的顺序。本文介绍了如何创建过滤器、配置过滤器,并通过示例展示了登录验证和字符编码设置的实现。
摘要由CSDN通过智能技术生成

java过滤器,java过滤器和拦截器的区别,java中的过滤器

过滤器

过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

3b0fdfb441b7706e2fbf66e09b10764c.png

如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉。

在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:

d6f9a629f82f7213c95dc7dc07cc6650.png

过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

下面是过滤器的简单应用:

1:创建过滤器

fe476c45f5cd46b25dc2f16589fb8c88.png

如图,新建一个class,实现接口Filter(注意:是javax.servlet中的Filter)。

2:重写过滤器的doFilter(request,response,chain)方法。另外两个init()、destroy()方法一般不需要重写。在doFilter方法中进行过滤操作。

常用代码有:获取请求、获取响应、获取session、放行。

剩下的代码就是根据session的属性进行过滤操作、设置编码格式等等了,看情况而定。

51e409b11aa51c150090697429a953ed.gif

HttpServletRequest request=(HttpServletRequest) arg0;//获取request对象

HttpServletResponse response=(HttpServletResponse) arg1;//获取response对象

HttpSession session=request.getSession();//获取session对象

过滤操作代码......

chain.doFilter(request, response);//放行,通过了当前过滤器,递交给下一个filter进行过滤

51e409b11aa51c150090697429a953ed.gif

3:在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器 过滤器 servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。

51e409b11aa51c150090697429a953ed.gif

filter

filter-name loginFilter /filter-name //过滤器名称

filter-class com.ygj.control.loginFilter /filter-class //过滤器类的包路径

init param //可选

param name 参数名 /param-name //过滤器初始化参数

param-value 参数值 /param-value

/init pamm

/filter

filter-mapping //过滤器映射

filter-name loginFilter /filter-name

url pattern 指定过滤器作用的对象 /url-pattern

51e409b11aa51c150090697429a953ed.gif

在配置中需要注意的有两处:一是 filter-class 指明过滤器类所在的包路径。二是 url-pattren 处定义过滤器作用的对象。一般有以下规则:

1:作用与所有web资源: url pattern /* /url-pattern 。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。

2:作用于某一文件夹下所有文件: url pattern /dir/* /url-pattern

3:作用于某一种类型的文件: url pattern *.扩展名 /url-pattern 。比如 url pattern *.jsp /url-pattern 过滤所有对jsp文件的访问请求。

4:作用于某一文件夹下某一类型文件: url pattern /dir/*.扩展名 /url-pattern

如果一个过滤器需要过滤多种文件,则可以配置多个 filter-mapping ,一个mapping定义一个url-pattern来定义过滤规则。

51e409b11aa51c150090697429a953ed.gif

filter

filter-name loginFilter /filter-name

filter-class com.ygj.control.loginFilter /filter-class

/filter

filter-mapping

filter-name loginFilter /filter-name

url-pattern *.jsp /url-pattern

/filter-mapping

filter-mapping

filter-name loginFilter /filter-name

url-pattern *.do /url-pattern

/filter-mapping

51e409b11aa51c150090697429a953ed.gif

例1:用过滤器实现登录验证,没登录则驳回访问请求并重定向到登录页面。

51e409b11aa51c150090697429a953ed.gif

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest) arg0;

HttpServletResponse response=(HttpServletResponse) arg1;

HttpSession session=request.getSession();

String path=request.getRequestURI();

Integer uid=(Integer)session.getAttribute("userid");

if(path.indexOf("/login.jsp") -1){//登录页面不过滤

arg2.doFilter(arg0, arg1);//递交给下一个过滤器

return;

if(path.indexOf("/register.jsp") -1){//注册页面不过滤

arg2.doFilter(request, response);

return;

if(uid!=null){//已经登录

arg2.doFilter(request, response);//放行,递交给下一个过滤器

}else{

response.sendRedirect("login.jsp");

}

51e409b11aa51c150090697429a953ed.gif

例2:设置字符编码

51e409b11aa51c150090697429a953ed.gif

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest request2=(HttpServletRequest) request;

HttpServletResponse response2=(HttpServletResponse) response;

request2.setCharacterEncoding("UTF-8");

response2.setCharacterEncoding("UTF-8");

chain.doFilter(request, response);

}

51e409b11aa51c150090697429a953ed.gif

本文标题:java过滤器,java过滤器和拦截器的区别

http://www.jianglexinxi.cn/yanergaozhi/416138.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值