首页 > 编程知识 正文

java怎么使用过滤器进行拦截,拦截器和过滤器的区别面试

时间:2023-05-04 12:29:57 阅读:41849 作者:2993

java过滤器、java过滤器和阻止程序的区别、java中的过滤器

过滤器

过滤器是位于客户端和服务器资源文件之间的过滤器,在访问资源文件之前,它通过一系列过滤器修改、判断请求,并中途阻止或修改不符合规则的请求。 也可以过滤响应以拦截或修改响应。

如图所示,来自浏览器的请求传递给第一个过滤器进行过滤,如果符合规则则释放,传递给过滤器链中的下一个过滤器进行过滤。 过滤器在链中的顺序与在web.xml中放置的顺序相关,前面放置的在链的开头。 请求通过链中的所有过滤器后,即可访问资源文件,如果无法通过,则可能由中间过滤器处理。

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

过滤器通常用于验证登录权限、控制资源访问权限、过滤敏感术语、转换字符编码等操作,无需在每个servlet上执行相应的操作,代码易于重用。

过滤器的简单应用如下所示。

1 :创建过滤器

如图所示,实现接口过滤器的新class (注意: javax.servlet中的过滤器)。

2 )重写过滤器的dofilter(request,response,chain )方法。 其他两个init ()、destroy )方法通常不需要重写。 使用doFilter方法执行过滤操作。

常用代码是获取请求、获取响应、获取会话和释放。

剩下的代码是根据session的属性执行过滤操作或设置编码格式(具体取决于情况)。

http servlet请求=(http servlet请求) arg0; 获取请求对象

http servlet响应=(http servlet响应) arg1; 获取响应对象

htpsessionsession=request.getsession (; 获取session对象

过滤操作代码……。

chain.dofilter(request,response ); //释放,通过当前过滤器,传递给下一个过滤器进行过滤

在web.xml中放置过滤器。 在这里,请记住原则。 在web.xml中,这是侦听器过滤器的servlet。 也就是说,在web.xml中,侦听器位于过滤器之前,过滤器位于servlet之前。 否则会出错。

菲尔斯特

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

filter-classcom.ygj.control.loginf ilter/filter-class//过滤器类的包路径

init param //选项

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

参数值param-value参数值/值

/init pamm

/过滤器

过滤器映射//过滤器映射

过滤器- nameloginfilter /过滤器- name

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

在结构上需要注意的地方有两个。 一个是过滤器类所在的包路径。 第二个对象是在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

如果需要通过一个过滤器过滤多个文件,可以设置多个过滤器映射,然后通过在一个映射中定义一个url-pattern来定义过滤规则。

菲尔斯特

过滤器- nameloginfilter /过滤器- 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

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

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");

}

例2:设置字符编码

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);

}

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。