精华内容
下载资源
问答
  • Java--Filter(过滤器
    2021-03-09 23:58:27

    Java--Filter(过滤器)

    简介

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源,例如Jsp,

    Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。

    实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    配置

    注解方式

    @WebFilter("/*")//访问所有资源之前,都会执行该过滤器

    public class Filter implements Filter {

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override

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

    System.out.println("filter被执行了....");

    //放行

    filterChain.doFilter(servletRequest,servletResponse);

    }

    @Override

    public void destroy() {

    }

    }

    web.xml

    demo1

    cn.itcast.web.filter.FilterDemo1

    demo1

    /*

    过滤器生命周期方法

    init

    在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源

    doFilter

    每一次请求被拦截资源时,会执行。执行多次

    destroy

    在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

    过滤器配置详解

    拦截路径配置

    具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行

    拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行

    后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行

    拦截所有资源:/* 访问所有资源时,过滤器都会被执行

    拦截方式配置:资源被访问的方式

    注解配置:

    设置dispatcherTypes属性 REQUEST:默认值。浏览器直接请求资源

    FORWARD:转发访问资源

    INCLUDE:包含访问资源

    ERROR:错误跳转资源

    ASYNC:异步访问资源

    web.xml配置

    设置标签

    配置多个过滤器

    执行顺序:如果有两个过滤器:过滤器1和过滤器2,具体过程?

    过滤器1

    过滤器2

    资源执行

    过滤器2

    过滤器1

    过滤器先后顺序问题

    有两个过滤器先执行哪一个?

    注解配置:按照类名的字符串比较规则比较,值小的先执行 如: AFilter 和 BFilter,AFilter就先执行了。

    web.xml配置: 谁定义在上边,谁先执行

    原文链接:https://www.cnblogs.com/guizimo/p/13280979.html

    更多相关内容
  • 对项目中的所有参数去除前后空格...可以基于此过滤器实现过滤跨站脚本攻击,参数的增加,修改!敏感词汇过滤。实现原理为重写HttpServletRequestWrapper,获取参数的方法。include和 Forwarded 内部转发不在过滤之内。
  • java Servlet注解实现过滤器

    java Servlet注解实现过滤器

    写在前面的话: 这篇文章是与Token验证关联的,看友们可以去看看俺的这篇Servlet的Token的实现

    实现Servlet过滤器方式:

    1、在xml文件里面配置
    2、在文件头添加注解

    首先我们应该知道什么是过滤器:

    java过滤器:顾名思义,就是在java中起到过滤的作用的一个方法
    可以在一个请求到达servlet之前,将其截取进行逻辑判断,然后决定是否放行到请求的servlet中。
    也可以在一个response到达客户端之前,截取结果进行逻辑判断,然后决定是否允许返回给客户端。

    在这里插入图片描述

    前面文章Token的实现中,我们可以知道,用户第一次登录是没有Token的,需要验证生成。同时前端需要在每次业务请求带上后端返回最新的一个Token,下面我们用过滤器进行Token的过滤

    1、首先新建一个java文件,继承Filter,并在文件头上加上@WebFilter注解,这里的Url是业务页面的请求地址,/*可匹配多个请求并处理
    在这里插入图片描述

    @WebFilter(urlPatterns = "/recharge/*")
    public class Myfilter implements Filter {
    

    继承了Filter接口,就需要实现的三个方法:

    看单词的意思,doFilter方法应该就是处理过滤的方法

    在这里插入图片描述

     @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void destroy() {
    
        }
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    

    这里需要注意的一点是:要明白这是前端发来的业务请求,需要过滤器来验证Token
    简单写一个前端的业务dopost请求:

    在这里插入图片描述

    package com.example.demo.newyears.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Author:Yun
     * @Date:2022/01/10/10:34
     * @Description:
     **/
    
    @WebServlet(name = "recharge", urlPatterns = "/recharge")
    public class Recharge extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            if (resp.getHeader("Token") != null) {
                resp.getWriter().println(req.getAttribute("id"));
            }
        }
    }
    
    

    过滤器的工作:那么过滤器的工作就是拿到前端的请求头中的Token,并对Token进行处理,然后要注意的一点就是后端有异常需要处理,因为过滤器处理后,后端拿到的Token可能已经被过滤器过滤返回给前端了,那么后端就需要处理一下异常。

    过滤器代码如下:

    package com.example.demo.newyears.servlet;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.text.ParseException;
    
    /**
     * @Author:Yun
     * @Date:2022/01/10/8:52
     * @Description:
     **/
    //拦截所有指定的url
    @WebFilter(urlPatterns = "/recharge/*")
    public class Myfilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    
        @Override
        public void destroy() {
        }
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //在过滤器中设置了返回体的编码格式的话,那么在业务页面就不需要再一个个页面去设置了
            ((HttpServletResponse) servletResponse).setHeader("Content-Type", "application/json;charset=UTF-8");
    //        String token = "";
    //        if (servletRequest instanceof HttpServletRequest) {
    **//这里需要注意,doFilter方法中的servletRequest,servletResponse和HttpServletRequest是对应一个请求**
            HttpServletRequest req = (HttpServletRequest) servletRequest;
            HttpServletResponse resp = (HttpServletResponse) servletResponse;
            try {
            //该方法再下面的代码段
                Token.timethan(req, resp);
            } catch (NullPointerException | ParseException e){
                e.printStackTrace();
            }
            //验证Token
    //        ((HttpServletResponse) servletResponse).setHeader("Token", "xxxxxxxxxxx");
            //todo servlet执行之前
            //继续往前走,职责链,这句话很关键
            filterChain.doFilter(servletRequest, servletResponse);
            //todo servlet的内容
        }
    }
    

    这里需要注意,doFilter方法中的servletRequest,servletResponse和HttpServletRequest是对应一个请求,所以再这里可以对请求中的参数进行获取,并设置想要传递的参数

    完整源代码:

    Myfilter.java
    
    package com.example.demo.newyears.servlet;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.text.ParseException;
    
    /**
     * @Author:Yun
     * @Date:2022/01/10/8:52
     * @Description:
     **/
    //拦截所有指定的url
    @WebFilter(urlPatterns = "/recharge/*")
    public class Myfilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    
        @Override
        public void destroy() {
        }
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            ((HttpServletResponse) servletResponse).setHeader("Content-Type", "application/json;charset=UTF-8");
    //        String token = "";
    //        if (servletRequest instanceof HttpServletRequest) {
            HttpServletRequest req = (HttpServletRequest) servletRequest;
            HttpServletResponse resp = (HttpServletResponse) servletResponse;
    //            token = req.getHeader("Token");
    //            req.setAttribute("id", 24);
            //setArribute设置的内容,可以在servlet doget中拿到
    //        }
            try {
                Token.timethan(req, resp);
            } catch (NullPointerException | ParseException e){
                e.printStackTrace();
            }
            //验证Token
    //        ((HttpServletResponse) servletResponse).setHeader("Token", "xxxxxxxxxxx");
    
            //todo servlet执行之前
            //继续往前走,职责链
            filterChain.doFilter(servletRequest, servletResponse);
            //todo servlet的内容
        }
    }
    
    
    Recharge.java
    
    package com.example.demo.newyears.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Author:Yun
     * @Date:2022/01/10/10:34
     * @Description:
     **/
    
    @WebServlet(name = "recharge", urlPatterns = "/recharge")
    public class Recharge extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            if (resp.getHeader("Token") != null) {
                resp.getWriter().println(req.getAttribute("id"));
            }
        }
    }
    
    
    Token.java
    
        /**
         * 后端拿到前端请求头的token对象,验证身份,比较有效时间
         *
         * @param req
         * @param resp
         * @return
         * @throws ParseException
         */
        public static void timethan(HttpServletRequest req, HttpServletResponse resp) throws ParseException, IOException {
    
            //拿到token对象
            try {
                String str = Base644.decoding(req.getHeader("Token"));
                //将token切割成两部分
                //str:"id:1001,status:1,endtime:2022-01-08 19:18:43";fb675266364f697519dac6d1e6ec1da3
                String ahead = str.substring(0, str.indexOf(";"));
                String behind = str.substring(str.indexOf(";") + 1, str.length());
    
                //时间从字符串中截取出来
                String ss = ahead.substring(ahead.indexOf("e"), ahead.length());
                String cc = ss.substring(ss.indexOf(":") + 1, ss.length());
    
                //将字符串的时间转为long类型的数据进行比较
                SimpleDateFormat sif = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date data = sif.parse(cc);
                long stime = data.getTime();
                Date date1 = new Date();
                Date dateafter = new Date(date1.getTime());
                long nowtime = dateafter.getTime();
                long differen = stime - nowtime;
    
                //解析当前token对象的id,状态
                int id = Integer.parseInt(ahead.substring(ahead.indexOf("i") + 3, ahead.indexOf(",")));
                int status = Integer.parseInt(ahead.substring(ahead.indexOf("s") + 7, ahead.lastIndexOf(",")));
    
                if (getMd5(ahead).equals(behind)) {
                    try {
                        if (differen < 0) {
                            resp.getWriter().println("请重新登录!");
                        } else {
                            resp.getWriter().println("前端请求的业务处理结果,后端已送到,请接受!");
                            //创建一个新的Token
                            resp.getWriter().println("Token:" + createToken(id, status));
                            resp.setHeader("Token", createToken(id, status));
                            req.setAttribute("id", id);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    resp.getWriter().println("请重新登录!");
                }
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 创建Token对象
         *
         * @param id
         * @param status
         */
        public static String createToken(int id, int status) throws UnsupportedEncodingException {
            SimpleDateFormat sif = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            Date dateafter = new Date(date.getTime() + 300000);
            Object endtime = sif.format(dateafter);
            String json = "id:" + id + ",status:" + status + ",endtime:" + endtime;
            JSONObject jsonObject = new JSONObject();
            String ss = jsonObject.toJSONString(json);
            System.out.println(ss);
    
            String begin = ss + ";" + getMd5(ss);
            //调用并转换成base64
            return Base644.encoding(begin);
        }
    
    Token.http
    
    GET http://localhost:8080/war/helloworld?name=cc&password=cc123
    Accept: application/json;application/json;charset=utf-8
    
    ###
    POST http://localhost:8080/war/recharge
    Content-Type: application/json;charset=utf-8
    Token: ImlkOjEwMDEsc3RhdHVzOjEsZW5kdGltZToyMDIyLTAxLTEwIDEyOjAwOjA0IjtkYjE3Y2M4YjJlZWVkZGJjMjhlMDBhMTA0MTdjNTM0OA==
    
    {
      "id": 1001,
      "name": "云先生",
      "date": [
        {
          "create_time": "2022-01-06"
        }
      ]
    }
    

    最后请看效果图:
    登录请求:
    在这里插入图片描述
    业务请求:
    在这里插入图片描述

    今天就到这里啦,有疑问的看友请留言或私聊我哦

    展开全文
  • 过滤器: 首先我们先定义一个过滤器Filter 实现HandlerInterceptor 接口。 package com.mlb.filter; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet....

    过滤器:

    首先我们先定义一个过滤器 Filter 实现 HandlerInterceptor 接口。

    package com.mlb.filter;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Filter implements HandlerInterceptor {
    
        /**
         * 在业务处理器处理请求之前被调用
         */
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("aaaaaa进来了");
            // 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller。
            // 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出。
            return true;
        }
    
        /**
         * 在业务处理器处理请求执行完成后,生成视图之前执行的动作
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        }
    
        /**
         * 完全处理完请求后被调用
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        }
    
    }

    三个方法的执行顺序: preHandle ---》 postHandle  ---》afterCompletion

    然后再创建一个 WebAppConfigurer 类实现 WebMvcConfigurer 接口。

    package com.mlb.filter;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class WebAppConfigurer implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 添加拦截器,可添加多个
            // addPathPatterns("/**") 设置拦截哪些请求,/** 拦截所有请求
            registry.addInterceptor(new Filter()).addPathPatterns("/**");
        }
    }

    启动项目,随便发一个请求,看控制台输出。

    Java注解:

    定义一个注解:

    package com.mlb.filter;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface AuthPower {
        String value() default "";
    }

    四种元注解:

    @Retention

    表示需要在什么级别保存该注解信息。RetentionPolicy参数包括:

    SOURCE:注解将被编译器丢弃。

    CLASS:注解在class文件中可用,但会被VM丢弃。

    RUNTIME:运行期间也保留注解,可通过反射读取注解信息。

    @Target

    表示该注解可以用于什么地方。ElementType参数包括:

    CONSTRUCTOR:构造器的声明。

    FIELD:域声明(包括enum实例)。

    LOCAL_VARIABLE:局部变量声明。

    METHOD:方法声明。

    PACKAGE:包声明。

    PARAMETER:参数声明。

    TYPE:类、接口(包括注解类型)或enum声明。

    @Documented将此注解包含在Javadoc中。
    @Inherited允许子类继承父类中的注解。

     四种元注解的的内容,来自 Java 编程思想 这本书。

    实现权限控制:

     代码的注释写的很详细了,各位自行观看。

         /**
         * 在业务处理器处理请求之前被调用
         */
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            HandlerMethod handlerMethod = null;
            // HandlerMethod封装了很多属性,在访问请求方法的时候可以访问到方法、方法参数、方法上的注解等信息。
            if (handler instanceof HandlerMethod) {
                handlerMethod = (HandlerMethod) handler;
            } else {
                return true;
            }
            Method method = handlerMethod.getMethod();
            // 返回指定类型的注解对象
            AuthPower authPower = method.getAnnotation(AuthPower.class);
            // 方法上没有该类型的注解,返回null
            if(authPower != null) {
                HttpSession session = request.getSession();
                String urlss = request.getRequestURI();
                String url = "".equals(authPower.value()) ? urlss.substring(request.getContextPath().length()) : authPower.value();
                // url 不符合数据库存的,可以另外进行处理。
                System.out.println("路径:" + url);
    
                // 然后获取登陆用户
                User user = (User)session.getAttribute("user");
                if (user == null) {
                    // 没登陆,重定向到登陆页面
                    //response.sendRedirect("login.jsp");
                    //return false;
                }
    
                // 登陆时把用户的所有权限查出来,这里测试,我就直接new 一个 List 了。
                List<String> list = new ArrayList<>();
                list.add("/home");
                if(list.contains(url)) {
                    System.out.println("该用户有权限访问。。。开心!");
                    return true;
                }else{
                    System.out.println("该用户没有权限访问。。。难过!");
                    return false;
                }
            }
            return true;
        }
    

     方法上加上注解:

         /**
         * 登陆成功页面
         * @return
         */
        @RequestMapping("home")
        @AuthPower
        public String home(){
            return  hrPath+"home";
        }
    
        /**
         * 首页面
         * @return
         */
        @RequestMapping("homePage")
        @AuthPower
        public String homePage(){
            return  hrPath+"homePage";
        }

    分别访问这两个路径,看控制台输出:

    完成了,是不是特别简单。

    展开全文
  • 一、过滤器的概述1.1过滤器的概念及作用概念过滤器是一个能够拦截客户端与服务端请求和响应的web组件(Servlet、Filter、Listener)。2.画图分析拦截请求:在请求到达客户端要访问的web资源前拦截请求。拦截响应:在...

    一、过滤器的概述

    1.1过滤器的概念及作用

    概念

    过滤器是一个能够拦截客户端与服务端请求和响应的web组件(Servlet、Filter、Listener)。

    2.画图分析

    72c03459ef838d2fc65bfe3e56eeebe6.png

    拦截请求:在请求到达客户端要访问的web资源前拦截请求。

    拦截响应:在响应到达客户端之前拦截响应  。

    为什么要使用过滤器

    在实际项目中,我们对访问某些资源的请求需要进条件的筛选、过滤。当这个请求满足特定情况,才能让这个请求访问目标资源,如果不满足条件,就不让访问目标资源。比如,我们在论坛上发帖,网络网网需要对所发的内容进行过滤,如果有不适合的 字眼,就需要对其特殊处理。这就是通过过滤来完成。

    二、过滤的应用场景

    1.过滤论坛中的非法字符

    2.登录权限检查

    3.统一处理项目的中文乱码(请求和响应的中文乱码)

    三、过滤开发入门

    需求:编写一个Filter,拦截浏览器发给HelloServlet的请求

    步骤:

    1.用Filter接口的doFilter方法进行请求和响应的拦截。

    2.开发步骤:

    【实现Filter接口】

    第一步:编写一个普通的java类HelloFilter,实现Filter接口,重写doFilter方法;

    第二步:在doFilter方法中打印"请求被拦截了......";

    【配置Filter】

    第一步:在web.xml文件中配置Filter的类路径:

    HelloFilter

    com.heima.filter.HelloFilter

    第二步:配置HelloFilter拦截的Servlet的映射路径:

    HelloFilter

    /helloServlet

    3.编写HelloServlet,配置映射路径为/helloServlet

    4.启动tomcat,访问HelloServlet。

    实现:

    package com.mazai.filter;

    import javax.servlet.*;

    import java.io.IOException;

    /**

    * @author buguniao

    * @version v1.0

    * @date 2018/12/16 23:38

    * @description TODO

    **/

    public class HelloFilter implements Filter {

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    System.out.println("请求被拦截了..............");

    }

    @Override

    public void destroy() {

    }

    }

    第二步:

    1.配置Filter

    第一步:在web.xml文件中配置Filter的类路径:

    HelloFilter

    com.heima.filter.HelloFilter

    第二步:配置HelloFilter拦截的Servlet的映射路径:

    HelloFilter

    /helloServlet

    2.编写HelloServlet,配置映射路径/helloServlet

    package com.mazai.servlet;

    import javax.servlet.ServletException;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    /**

    * @author buguniao

    * @version v1.0

    * @date 2018/12/16 23:54

    * @description TODO

    **/

    @WebServlet("/helloServlet")

    public class HelloServlet extends HttpServlet {

    @Override

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    doGet(request, response);

    }

    @Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    System.out.println("HelloServlet接收请求......");

    }

    }

    3、启动tomcat,访问HelloServlet,通过测试,发现请求被拦截了,并没有到达HelloServlet。如果需要放行,则需要在Filter中编写以下代码 :

    四、Filter的注解开发

    Servlet3.0版本的Filter提供了注解开发,注解能够取代对Filter的配置,使得Filter的开发更高效;配置Filter使用的注解是:@WebFilter(urlPatterns = "/demo") 。

    1、Filter的注解开发步骤

    第一步:创建一个普通的java类实现Filter接口,重写抽象方法;

    第二步:在这个类上面使用@WebFilter注解进行映射路径的配置,如:@WebFilter(urlPatterns = "/demo");

    第三步:重写doFilter方法,进行具体的业务逻辑处理;

    【注解开发示例】AnnDemo1Filter.java

    import javax.servlet.*;

    import javax.servlet.annotation.WebFilter;

    import java.io.IOException;

    @WebFilter(urlPatterns = "/demo")

    public class AnnDemo1Filter implements Filter{

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    }

    @Override

    public void destroy() {

    }

    }

    2、使用IDEA的Filter注解模板

    IDEA开发工具提供了Filter注解模板帮助我们简化Filter的注解开发,具体做法如下:

    第一步:配置Filter注解模板

    #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

    #parse("File Header.java")

    @javax.servlet.annotation.WebFilter(urlPatterns = "/")

    public class ${Class_Name} implements javax.servlet.Filter {

    public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {

    }

    public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, java.io.IOException {

    chain.doFilter(req, resp);

    }

    public void destroy() {

    }

    }

    第二步:使用模板创建Filter;

    在任意包下面,鼠标右键new--->Filter

    3、注解开发注意事项

    当有多个Filter都对同一个请求路径进行拦截的时候,xml配置和注解中Filter执行顺序不一样!!!

    xml配置方式的Filter,执行顺序按照在web.xml中配置的顺序,从上到下执行;

    注解开发的Filter,执行的顺序是按照实现类的字母表顺序依次执行!

    展开全文
  • Servlet3.0使用注解标注过滤器 Servlet3.0使用注解标注过滤器
  • java过滤器全局解析token文章目录java过滤器全局解析token使用过滤器定义一个全局的token解析器一般接口定义全局AOP解析接口使用注解@RequestHeader我的需求以及方法需求和现状实践注意点使用过滤器定义一个全局的...
  • 过滤器的工作原理及生命周期init():这是过滤器的初始化方法,web容器创建过滤器实例后将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数。doFilter():这个方法完成实际的过滤操作。这个地方是过滤器的...
  • java过滤器Filter
  • java-过滤器的使用
  • 先定义一个过滤器 Filter 实现 HandlerInterceptor 接口。 import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet....
  • Filter:过滤器 1、概念:过滤器的作用:般用于完成通用的操作,如:登入验证,统一编码处理、敏感字符过滤… 快速入门: 创建一个web项目 定义一个类实现filter过滤器接口、从写方法。 将过滤器配置到web.xml中、 ...
  • 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容是依赖于spring容器,过滤器依赖与servlet容器。 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用,可以...
  • Java中的过滤器是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理。通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。 创建过滤器 创建过滤器类FilterTest实现javax...
  • javaweb三大组件之过滤器Filter一、过滤器执行流程1.执行过滤器2.执行放行后的资源3.回来执行过滤器放行代码下边的代码二、过滤器生命周期方法1.init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行...
  • Java Filter过滤器+Listen监听器啥是过滤器顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学。但是java中的过滤器与生活中...
  • 1.什么是拦截? (1)在AOP中用于在某个方法或字段被访问之前,进行拦截然后再之前货之后加入某些操作。拦截是AOP的一种实现策略。 (2)拦截是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义一个...
  • ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。 ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
  • Java过滤器链原理解析

    千次阅读 2018-01-05 15:09:53
    在很多Java Web项目中我们会在web.xml中配置一些过滤器来拦截请求,比如下面解决乱码的编码过滤器: encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 ...
  • Java中的过滤器Filter

    2022-05-07 00:31:27
    一:Filter简介 ...(二)过滤器链 (FilterChain) (三)Filter的配置 1.通过web.xml文件配置 2.通过注解配置 (四)Filter的生命周期 (五)中文乱码过滤器 三:测试案例 1.单个过滤器 2.多个过滤器
  • Java之拦截器与过滤器

    千次阅读 2022-04-22 23:42:23
    Java之拦截器与过滤器
  • 场景描述:当我们查询一个类时,返回所有...通过设置注解参数,设置字段信息(过滤字段、保留字段),并将bean自动封装为json并返回。 整体思路: 1、通过ResponseBodyAdvice实现在响应体写出之前做一些处理;比如,修改
  • 一、什么是过滤器Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理 的所有web资源:例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些...
  • java过滤器的实现一、注解方式实现(`@WebFilter`)`@WebFilter``@Order(1)``@ServletComponentScan`扩展二、直接注入到spring中也可以这样写 一、注解方式实现(@WebFilter) @WebFilter(urlPatterns = "/api/*", ...
  • 1.第一步,在SpringBoot的启动类上配置扫描过滤器注解 package com.jshiming; ​ import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot...
  • Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作。 我们希望实现的效果是用户如果登陆过了就...
  • 布隆过滤器java

    2021-07-30 22:30:00
    布隆过滤器java) 概述 布隆过滤器概念:https://www.cnblogs.com/liyulong1982/p/6013002.html 布隆过滤器主要用于: 判断数据是否存在(有误判率,但不会出现假反例的情况,即不存在的数据一定会被过滤掉) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,760
精华内容 49,504
关键字:

java 过滤器注解

java 订阅