4.Spring Boot 过滤器 Filter 使用

2019年10月11日 18:55 · 阅读(539) ·

说明

本文代码基于 2.引用 lombok 使用 log 项目代码进行修改

开发环境

名称 版本
操作系统 Windows 10 X64
JDK JDK1.8(jdk-8u151-windows-x64)
IntelliJ IDEA IntelliJ IDEA 2018.3
Maven Maven 3.6.0

相关内容

Java 基础学习33-Filter

文件结构

test-invoice-web

添加 filter 包和文件 OauthFilter

  1. package com.test.invoice.filter;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.core.annotation.Order;
  4. import javax.servlet.*;
  5. import javax.servlet.annotation.WebFilter;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. import static com.xiaoleilu.hutool.lang.Console.log;
  10. /**
  11. * 过滤器
  12. *
  13. * @author: v_hwhao
  14. * @version:
  15. * @date: 2019-09-26 19:47
  16. */
  17. @Order(1)//越小越先执行
  18. @WebFilter(filterName = "oauthFilter", urlPatterns = "/*")
  19. @Slf4j
  20. public class OauthFilter implements Filter {
  21. /**
  22. * 调用接口前
  23. * @param filterConfig
  24. * @throws ServletException
  25. */
  26. @Override
  27. public void init(FilterConfig filterConfig) throws ServletException {
  28. System.out.println("init");
  29. }
  30. /**
  31. * 调用接口后
  32. * @param servletRequest
  33. * @param servletResponse
  34. * @param filterChain
  35. * @throws IOException
  36. * @throws ServletException
  37. */
  38. @Override
  39. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  40. HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
  41. HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
  42. String contentToken=((HttpServletRequest) servletRequest).getHeader("Content-token");
  43. httpServletResponse.setHeader("Content-token", contentToken+"-Set");
  44. System.out.println("doFilter 之前-"+contentToken);
  45. filterChain.doFilter(servletRequest, servletResponse);
  46. System.out.println("doFilter 之后-"+contentToken);
  47. }
  48. @Override
  49. public void destroy() {
  50. System.out.println("destroy");
  51. }
  52. }

启动类 WebApplication 添加注解

  1. @ServletComponentScan //modify by v_hwhao 20190926-加入过滤器
  2. public class WebApplication { //extends SpringBootServletInitializer
  3. public static void main(String[] args){
  4. SpringApplication.run(WebApplication.class,args);
  5. }
  6. }

TRbtTestController-Get() 方法修改

  1. package com.test.invoice.controller;
  2. import com.google.gson.Gson;
  3. import com.google.gson.GsonBuilder;
  4. import com.test.invoice.data.TRbtTestData;
  5. import com.test.invoice.data.TRbtTestDataParam;
  6. import com.test.invoice.service.consumer.TRbtTestConsumer;
  7. import com.test.invoice.vo.ResponseVO;
  8. import io.swagger.annotations.Api;
  9. import io.swagger.annotations.ApiOperation;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.web.bind.annotation.*;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. /**
  14. * 消费者,通过 Feign-api 调用
  15. *
  16. * @author:
  17. * @version:
  18. * @date: 2019-08-12 14:49
  19. */
  20. @RestController
  21. @Api(description = "测试框架系统控制类")
  22. @RequestMapping("/Inv/Api")
  23. @Slf4j
  24. public class TRbtTestController {
  25. //@Resource
  26. @Autowired
  27. private TRbtTestConsumer testConsumer;
  28. @PostMapping("/Test/Get")
  29. @ApiOperation(value = "系统框架测试-获取单个数据", httpMethod = "POST", response = ResponseVO.class, notes = "系统框架测试-获取单个数据")
  30. public ResponseVO Get(@RequestBody TRbtTestData data){
  31. GsonBuilder builder = new GsonBuilder();
  32. Gson gson = builder.create();
  33. //log.info("请求方法 Get(),请求参数:"+ gson.toJson(data));
  34. ResponseVO result = testConsumer.Get(data);
  35. System.out.println("返回数据:"+ gson.toJson(result));
  36. //log.info("返回数据:"+ gson.toJson(result));
  37. return result;
  38. }
  39. }

测试

使用 Postman 访问 Get 接口

地址:http://localhost:8080/Inv/Api/Test/Get
Body raw 参数:"id":"","name":"测试数据-菲克-1","version":""}

IntelliJ IDEA 2018.3 控制台相关输出为

  1. init
  2. doFilter 之前-TestToken
  3. 返回数据:{"code":2000,"msg":"Success","data":{"id":"","name":"测试数据-菲克-1","version":"1.0.1"},"timestamp":1569500056369}
  4. doFilter 之后-TestToken