JavaWeb过滤器简介-创新互联

过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。

网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了治多免费建站欢迎大家使用!

在请求到达Servlet/JSP之前,过滤器截获请求。

在响应送给客户端之前,过滤器截获响应。

多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射的顺序决定。

最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息。

我们需要实现一个Filter接口,导入import javax.servlet.*,并实现其中的抽象方法。

import javax.servlet.*;
import java.io.IOException;

public class LoginFilter implements Filter {

    @Override
    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    //删除过滤器
    public void destroy() {

    }
}

以上操作和Servlet很相似,也可以理解为Filter就是一个Servlet,只是Filter所对应的功能和位置不相同。

配置映射路径:

过滤器配置映射路径有两种方法,第一种方法就是在web.xml中配置

login.jsp  过滤器配置映射 LoginFiltercom.scores.filter.LoginFilterLoginFilter/*

第二种方法就是利用注解的方式进行配置( 拦截的路径 /*:拦截所有的请求)

@WebFilter(urlPatterns = {"/*"})

配置完成之后接下来我们就可以给LoginFilter写上一些输出语句及逻辑判断

package com.scores.filter;

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        //获取当前uri
        String uri = request.getRequestURI();
        //通过这条输出语句可以清楚的看到被拦截的请求
        System.out.println("doFilter"+uri);
        //通过过滤器----允许通过
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

在实行不同的要求时可以用不同的逻辑判断来完成,例如你想完成必须要有用户登录才能继续访问后续页面的要求,就可以在doFilter中加入逻辑判断,假如nowses就代表你的账号密码。

//逻辑判断
Object loginuser = request.getSession().getAttribute("nowses");
//如果他这个loginuser不为空
if(loginuser != null){
    //允许通过
     filterChain.doFilter(servletRequest,servletResponse);
    
}else{
    //跳转回登录页面
    HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.sendRedirect("/ScoresWeb/login.jsp");
}

总结:

过滤器:根据业务需求对请求进行拦截。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:JavaWeb过滤器简介-创新互联
分享网址:http://hbruida.cn/article/depscc.html