Spring boot配置过滤器filter,读取cookie 设置cookie,读取请求头等

首先 我们理解一下filter这个狗东西在项目中的作用

 上图是filter在服务中的作用

spring boot 中添加filter分为两种 一种为自定义版 一种为注解版

这里我们先用自定义版,目录结构如下吊样

 首先我们定义一个MyFilter类 并实现Filter接口,这里就是http入口和出口,所以我们可以在这里做一些业务上的操作

package com.filter;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Arrays;/*** @Auther: Xu* @Date: 2021/7/9 - 07 - 09 - 14:19* @Description: com.filter* @version: 1.0*/
@Slf4j
@Component
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("初始化过滤器{}",filterConfig.getFilterName());}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("过滤器开始对请求进行预处理");HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;//获取请求地址String requestUrl = request.getRequestURI();System.out.println("请求地址为:"+requestUrl);Cookie[] cookies = request.getCookies();log.info("获取到的cookie为{}", cookies);if(cookies == null){//创建cookieCookie cookie = new Cookie("youcookie", URLEncoder.encode("aaabbb","utf-8"));cookie.setMaxAge(60 * 60 * 24);//设置有效期cookie.setSecure(true);  //Https 安全cookiecookie.setHttpOnly(true);//只读//设置cookie.setPath(“/”);cookie.setPath("/");response.addCookie(cookie);}else{System.out.println("cookies"+cookies.toString());}//用来处理跨域
//        response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");//这里不能写*,*代表接受所有域名访问,如写*则下面一行代码无效。谨记
//        response.setHeader("Access-Control-Allow-Credentials", "true");//true代表允许携带cookie
//        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
//        response.setHeader("Access-Control-Max-Age", "3600");
//        response.setHeader("Access-Control-Allow-Headers", "content-type,Authorization");filterChain.doFilter(servletRequest,servletResponse);System.out.println("已成功返回结果"+requestUrl);}@Overridepublic void destroy() {log.info("过滤器已销毁");}
}

接下来我们定义MyFileConfig类

package com.config;import com.filter.MyFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;import java.util.ArrayList;
import java.util.Arrays;/*** @Auther: Xu* @Date: 2021/7/9 - 07 - 09 - 14:17* @Description: com.config* @version: 1.0*/
@Configuration
public class MyFilterConfig {@Autowiredprivate MyFilter myFilter;@Beanpublic FilterRegistrationBean thirdFilter() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(myFilter);filterRegistrationBean.addUrlPatterns("/*");
//        filterRegistrationBean.setUrlPatterns(new ArrayList<>(Arrays.asList("/api/*")));return filterRegistrationBean;}
}

@Configuration这个注解 之前跟大家讲过,当我们项目启动的时候会自动加载带有这个注解的类

注意:

        在我们主程序入口 appLication这个类上面要加上

@ServletComponentScan

        这个注解,filter才会生效。

OK 重新启动项目就可以了

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部