关于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版
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星