概要
过滤器Filter
流程
1.启动类中增加@ServletComponentScan
2.新建Filter类,implements Filter 并实现对应接口(javax.servlet.filter)
3.使用@WebFilter标记一个类为Filter,被spring扫描
@WebFilter(urlPatterns = “/api/cs/*”,filterName = “myfilter”)
4.urlPatterns 拦截规则
5.控制filterChain.doFilter(servletRequest,servletResponse);放行
6.不放行,返回前端json数据
说明:
“/api/cs/*” :拦截api/cs下的所有接口
具体代码
启动类
@ServletComponentScan
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Filter
package com.example.demo.Filter;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.thymeleaf.util.StringUtils;
import java.io.IOException;
import java.io.PrintWriter;
@WebFilter(urlPatterns = "/api/cs/*",filterName = "myfilter")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("拦截器拦截");
HttpServletRequest req= (HttpServletRequest)servletRequest;
HttpServletResponse rep=(HttpServletResponse)servletResponse;
String token=req.getHeader("token");
if(!StringUtils.isEmpty(token)){
System.out.println("token"+token);
if(token.equals("aaa")){
System.out.println("YSE");
filterChain.doFilter(servletRequest,servletResponse);
}else{
try {
returnJson(rep,"{\"code\":500,\"msg\":\"token is error!\"}");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}else{
try {
returnJson(rep,"{\"code\":400,\"msg\":\"token is null!\"}");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
private void returnJson(HttpServletResponse response, String json) throws Exception{
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
try {
writer = response.getWriter();
writer.print(json);
} catch (IOException e) {
} finally {
if (writer != null)
writer.close();
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
controller
@RestController
@RequestMapping("/api/cs/")
public class FileterCsDemo {
@GetMapping("filterCs")
public ResultVO filterCs(){
return ResultUtils.success("获取token成功");
}
}