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