过滤器是对数据进行过滤和预处理。开发人员可以对客户端提交的数据进行过滤处理,也可以对服务器返回的数据进行处理。
比如验证用户的登录情况,权限验证,对静态资源进行访问权限控制等...
定义一个JwtFilter 实现Filter接口。重写里面的三个方法。(按Ctrl+I 一键重写)
package com.smile.blog.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName = "jwtFilter",urlPatterns = "/*") public class jwtFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //jwt 过滤器开启 System.out.println("jwt 过滤器开始"); Filter.super.init(filterConfig); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("开始验证 ..."); filterChain.doFilter(servletRequest,servletResponse); System.out.println("验证结束 ...."); } @Override public void destroy() { //jwt过滤器结束 System.out.println("jwt 过滤器结束"); Filter.super.destroy(); } }
解释说明:
@WebFilter
注解,用于将类声明为过滤器
,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值)
@Order
注解,用于定义组件的加载顺序,值越小,加载的优先级越高
init()
方法只会执行一次,初始化过滤器
destory()
只会在项目停止或项目重新部署执行
doFilter()
核心方法,配置过滤器的逻辑代码
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //预处理 System.out.println("开始验证 ..."); filterChain.doFilter(servletRequest,servletResponse); //后处理(处理servletResponse) System.out.println("验证结束 ...."); }
对每个请求及响应增加额外的预处理和后处理逻辑。执行该方法之前,即对用户请求进行预处理,执行该方法后,即对服务器进行后处理。
在Application上添加注解@ServletComponentScan
解释说明:@ServletComponentScan
注解后,Servlet
,Filter
,Listener
可以直接通过@WebServlet
,@WebFilter
,@WebListener
注解自动注册
package com.smile.blog; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
结果验证