美文网首页
Java中Filter(过滤器)的使用

Java中Filter(过滤器)的使用

作者: 蔡俊宇 | 来源:发表于2017-04-07 09:44 被阅读281次

Filter的作用

Filter在Java web应用中起到拦截器的作用,常见使用场景是检查是否已登陆.敏感词汇过滤等,作为Servlet的核心技术被广泛使用在各个方面

Filter的功能

Filter能在请求到达Servlet之前修改请求和响应的信息,经过判断以后决定是否要放行改(修改)请求的内容.

Filter的使用

Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,Web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:

调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。

使用的第一步,是需要在web.xml中配置Filter,主要是配置Filter对应的实体类和配置拦截请求的样式,配置方法如下:

<filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>cn.wufeng.core.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

第二步编写实体类,要实现Filter接口

里面包含了三个需要实现的方法:


 public void destroy();//销毁的时候可以同时销毁FilterConfig 的配置
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//必须经过的方法,需要判断的条件可以写在里面
 public void init(FilterConfig filterConfig) throws ServletException;//初始化会调用的方法,

doFilter里面,进行了业务所需要的判断,如果准予放行,则调用chain.doFilter(request, response);方法放行.
例子如下:

package cn.wufeng.core.filter;

import java.io.IOException;

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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import cn.itcast.core.constant.Constant;
import cn.itcast.core.permission.PermissionCheck;
import cn.itcast.nsfw.user.entity.User;

public class LoginFilter implements Filter {

    @Override
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String uri = request.getRequestURI();
        //判断当前行为是否为登陆请求
        if(!uri.contains("sys/login_")){
            
            //已经登陆过的时候直接放行
            if(request.getSession().getAttribute(Constant.USER) !=null){
                //权限坚定
                if(uri.contains("/nsfw")){
                    User user =(User)request.getSession().getAttribute(Constant.USER);              
                    WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());

                    PermissionCheck pc = (PermissionCheck) applicationContext.getBean("permissionCheck");
                    
                    if (pc.isAccessible(user,"nsfw")){
                        //说明有权限,放行
                        chain.doFilter(request, response);
                    }else{
                        //没有权限,跳转到没有权限的提示页面
        response.sendRedirect(request.getContextPath()+"/sys/login_toNoPermissionUI.action");
                        
                    }

                }else{
                    
                    chain.doFilter(request, response);
                }
                
            }else{
                //没有登陆的时候跳转到登陆页面
                response.sendRedirect(request.getContextPath()+"/sys/login_toLoginUI.action");
            }
        }else{
            //登陆请求,直接放行
            chain.doFilter(request, response);  
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }
}

相关文章

  • Filter

    Java****中的****Filter****过滤器 Filter****简介 Filter也称之为过滤器,它是...

  • Java中的Filter过滤器

    Java中的Filter过滤器 Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术...

  • AngularJS

    过滤器 自定义过滤器: filter的定义和js中的使用. 在html中使用, filter可以连续使用多个. {...

  • 16. 过滤器 filter

    AngularJS中的过滤器 filter使用,在 搜索中 使用非常广泛

  • Spring Boot使用过滤器Filter

    Spring Boot使用过滤器Filter >> 过滤器Filter介绍Filter也称为过滤器,是处于客户端与...

  • springboot集成shiro跨域问题

    使用过滤器 注册过滤器 shiro自定义filter中 如果使用Printwriter ServletOutpu...

  • Spring5源码解析-Spring中的处理拦截器

    在Java的Web应用程序中通常使用过滤器(即filter)来捕获HTTP请求。但它们仅为webapps保留。Sp...

  • Interceptor和Filter区别

    过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的...

  • Java中Filter(过滤器)的使用

    Filter的作用 Filter在Java web应用中起到拦截器的作用,常见使用场景是检查是否已登陆.敏感词汇过...

  • Java Web 之过滤器

    前言 学一学Java Web 三大组件之一过滤器。 Filter过滤器 Filter过滤器用来对Web资源进行一些...

网友评论

      本文标题:Java中Filter(过滤器)的使用

      本文链接:https://www.haomeiwen.com/subject/mciwpttx.html