@Slf4j@Component@WebFilter(urlPatterns = "/platform/*")public class AuthFilter extends OncePerRequestFilter {@Autowiredprivate ResourceAuthService authService;/*** 在这里对用户和对应的url权限进行校验*/@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request);HttpResponseWrapper responseWrapper = new HttpResponseWrapper(response);String userName = request.getHeader(USER_NAME);ApplicationContext.setUserName(userName);// 用户没有权限if (!authService.userHaveAuth(userName, requestWrapper)) {responseWrapper.setBody(generateNoAuth());} else {filterChain.doFilter(requestWrapper, responseWrapper);}//输出 response streamresponseWrapper.copyToResponse();}private String generateNoAuth() {Response<?> response = new Response<>();response.setErrCode(FORBIDDEN.value());response.setErrMsg("没有权限");return JSON.toJSONString(response);}}
response head 放置数据失效
注意
后来发现就是给response中的head添加数据的时候不生效,看了下面这篇文章之后才知道,response中的head在调用链处理之后,其中的head部分是会被放到Buffer里面的,这样在doFilter之后进行处理,里面的东西就不是一个了,因此,通常情况下,可以将addHead部分放到doFilter的上面
