1. 配置servlet注解包扫描
在springboot启动类上加@ServletComponentScan注解
如:
@SpringBootApplication
@ServletComponentScan
public class DempProjectApplication {
public static void main(String[] args) {
SpringApplication.run(DempProjectApplication.class, args);
}
}
2. 编写自定义过滤器
-
编写自定义过滤器
-
需实现Filter接口
重写init,doFilter,destroy方法 -
在类上加@WebFilter注解
urlPatterns 配置过滤路径
如:
@WebFilter(urlPatterns = "/api/v1/pri/*")
public class CustomFilter implements Filter {
private static final ObjectMapper mapper = new ObjectMapper();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CustomFilter init...");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
// filter
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// get token
String token = request.getHeader("token");
if(!StringUtils.hasLength(token)){
token = request.getParameter("token");
}
if (!StringUtils.hasLength(token)){
renderResponse(response, "token not input");
}
// verify token
User user = Cache.userCache.get(token);
if(user != null){
//token is ok
filterChain.doFilter(request, response);
}else {
//token verify failure
//write response
//write response
renderResponse(response, "token verify failure");
}
}
private void renderResponse(HttpServletResponse response, String json){
response.setCharacterEncoding("utf8");
response.setContentType("application/json");
try (PrintWriter writer = response.getWriter()) {
writer.write(mapper.writeValueAsString(JsonData.buildError(json)));
}catch (IOException e){
e.printStackTrace();
}
}
@Override
public void destroy() {
System.out.println("CustomFilter destroy...");
}
}