在doFilter这里可以直接把异常抛出吗?通过全局Handler来返回异常信息,而不是通过直接拼接返回给前端
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
User user =(User)session.getAttribute(Constant.IMOOC_MALL_USER);
if(user==null){
throw new ImoocMallException(ImoocMallExceptionEnum.NEED_LOGIN);
}
//校验是否是管理员
Boolean adminRole = userService.checkAdminRole(user);
if (!adminRole){
throw new ImoocMallException(ImoocMallExceptionEnum.NEED_ADMIN);
}
filterChain.doFilter(servletRequest,servletResponse);
}
41
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小班
2021-05-05 18:55:18
同学你好,1、这里同学可以使用ApiRestResponse.error来生成响应对象再输出,这样也是可以的。
2、但是需要直接使用try catch捕获,只是这样的方式并不合理,并不能完成这个过滤器的作用,比如:在当前的AdminFilter类中,完成对用户非空判断和是否管理员的判断
当userService.checkAdminRole(currentUser)的返回值是true或者false时,需要对这个结果进行判断,它并没有报错信息,所以try catch异常管理也不会生效,所以就没有完成这个是否管理员的判断。
所以这样配置并不合理。
祝学习愉快!
java工程师2020版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星