过滤器

定义:在对项目中的资源发起请求时,可以通过配置的过滤规则,对指定的资源请求进行拦截,执行完过滤器中的逻辑之后,再根据
写法:①实现Filter接口,②实现init,doFilter,destroy方法,③在web.xml中配置过滤器
//配置文档方式↓
<filter>
<filter-name>Filter</filter-name>
<filter-class>com.Filter</filter-class>
</filter>

<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern>//可以指定过滤不同页面,此处是过滤所有页面
</filter-mapping>
//注解方式↓
@WebFilter(
    filterName = "Filter",
    urlPatterns = {"/*"},
    initParams = {
        @WebInitParam(name = "encoding",value = "UTF-8")
    }
)

//判断当前页面有没有登录
<filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>homework.filter.LoginFilter</filter-class>
    <init-param>
        <param-name>pass</param-name>
        <param-value>login.jsp,register.jsp</param-value>//指定放行的页面
    </init-param>
</filter>
<filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>//过滤所有jsp页面
</filter-mapping>
//======================在LoginFilter.java取得需要放行的页面
public class LoginFilter implements Filter {
    String[] pages=null;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init LoginFilter");
         pages=filterConfig.getInitParameter("pass").split(",");
        for (String str:pages) {
            System.out.println("who can pass-->"+str);
        }
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter LoginFilter");
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        //1、取得客户端请求的资源名称
        String uri = request.getRequestURI();
        uri = uri.substring(uri.lastIndexOf("/")+1);
        //2、判断请求的资源是否在放行之列,检查session中有没有用户信息
        boolean isPass = false;
        for(String page:pages){
            if(page.equals(uri)){
                isPass=true;
                break;
            }
        }
        if(isPass){
            filterChain.doFilter(request,response);
        }else {
            Object object = request.getSession().getAttribute("no");
            //3、有则放行,否则拦截
            if(object !=null){
                filterChain.doFilter(request,response);
            }else{
                request.setAttribute("message","请登录再试");
                request.getRequestDispatcher("../homework/login.jsp").forward(request,response);
            }
        }
    }
    @Override
    public void destroy() {
        System.out.println("destroy LoginFilter");
    }
}

//编码过滤
public class Filter_All implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("过滤器初始化");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器执行");
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        request.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {
        System.out.println("过滤器被销毁");
    }
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24065713/article/details/77970622
文章标签: filter 过滤器 j2ee
个人分类: J2EE
想对作者说点什么? 我来说一句

JAVA过滤器 过滤器

2009年08月25日 18KB 下载

过滤器与监听器

2011年10月06日 549KB 下载

过滤器和监听器的使用

2009年01月14日 181KB 下载

四个有用的java过滤器

2011年02月26日 22KB 下载

jsp字符过滤器

2013年11月25日 9KB 下载

4899过滤器.exe

2010年09月11日 170KB 下载

java过滤器

2011年11月05日 2.24MB 下载

JAVA的中文字符过滤器

2011年05月20日 836B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭