关于filter内代码的相关问题
public class AdminFilter implements Filter { @Autowired private UserService userService; @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpSession session = request.getSession(); User loginUser = (User) session.getAttribute(Constant.LOGIN_USER); if(loginUser == null) { print(servletResponse, BusinessExceptionEum.NEED_LOGIN); return; } if (userService.checkAdminRole(loginUser)) { filterChain.doFilter(servletRequest, servletResponse); } else { print(servletResponse, BusinessExceptionEum.ACCESS_DENY); } } @Override public void destroy() { } private void print(ServletResponse servletResponse, BusinessExceptionEum businessExceptionEum) throws IOException { PrintWriter out = new HttpServletResponseWrapper((HttpServletResponse) servletResponse).getWriter(); out.write("{\n" + " \"status\": "+ businessExceptionEum.getCode() + ",\n" + " \"msg\": \"" + businessExceptionEum.getMsg() + "\",\n" + " \"data\": null\n" + "}"); out.flush(); out.close(); } }
问题描述:
HttpServletResponseWrapper.getWritter.write中如果输出中文字符会出现乱码,请问如何解决
被Filter拦截的数据就不能在WebLogAspect捕捉了,要想被这个Aspect拦截,要怎么操作,是要加什么JoinCut吗?
public class WebLogAspect { private final Logger log = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution (public * i3kp0d.proj.work.mall.controller.*.*(..))") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) { ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); log.info("URL : " + request.getRequestURI()); log.info("HTTP_METHOD : " + request.getMethod()); log.info("IP : " + request.getRemoteAddr()); log.info("CLASS_METHOD : " + joinPoint.getSignature().getName() + "." + joinPoint.getSignature().getName()); log.info("ARGS : " + Arrays.toString((joinPoint.getArgs()))); } @AfterReturning(returning = "res", pointcut = "webLog()") public void doAfterReturning(Object res) throws JsonProcessingException { log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res)); } }
24
收起
正在回答 回答被采纳积分+1
1回答
java工程师2020版
- 参与学习 人
- 提交作业 9401 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星