1. @Slf4j
  2. @Component
  3. @WebFilter(urlPatterns = "/platform/*")
  4. public class AuthFilter extends OncePerRequestFilter {
  5. @Autowired
  6. private ResourceAuthService authService;
  7. /**
  8. * 在这里对用户和对应的url权限进行校验
  9. */
  10. @Override
  11. protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
  12. HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request);
  13. HttpResponseWrapper responseWrapper = new HttpResponseWrapper(response);
  14. String userName = request.getHeader(USER_NAME);
  15. ApplicationContext.setUserName(userName);
  16. // 用户没有权限
  17. if (!authService.userHaveAuth(userName, requestWrapper)) {
  18. responseWrapper.setBody(generateNoAuth());
  19. } else {
  20. filterChain.doFilter(requestWrapper, responseWrapper);
  21. }
  22. //输出 response stream
  23. responseWrapper.copyToResponse();
  24. }
  25. private String generateNoAuth() {
  26. Response<?> response = new Response<>();
  27. response.setErrCode(FORBIDDEN.value());
  28. response.setErrMsg("没有权限");
  29. return JSON.toJSONString(response);
  30. }
  31. }

response head 放置数据失效

注意

后来发现就是给response中的head添加数据的时候不生效,看了下面这篇文章之后才知道,response中的head在调用链处理之后,其中的head部分是会被放到Buffer里面的,这样在doFilter之后进行处理,里面的东西就不是一个了,因此,通常情况下,可以将addHead部分放到doFilter的上面

参考:

https://blog.csdn.net/woslx/article/details/100540958