码迷,mamicode.com
首页 > 其他好文 > 详细

在ServletFilter层返回多字段提示给前端

时间:2020-02-20 20:03:00      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:erro   地方   失败   方便   servlet   filter   实现   ror   jackson   

0、背景:在由于不想在小项目中引入SpringSecurity这种重量级安全框架,我自定义了一个LoginFilter来处理认证+授权逻辑。对于认证或授权失败的情况,最初是在filter中抛出异常,并携带401状态码,然后利用Spring的ControllerAdvice全局捕获这些异常并转换后返回给前端。

1、实践中发现Controller层以及下层的异常均能被捕获,唯独LoginFilter这层的异常不能捕获,其原因是
ControllerAdvice的作用的纵深在filter之下,所以filter层发生异常时请求根本还没到到ControllerAdvice。

~~2、解决办法是直接在filter发生错误的地方直接将提示信息装入Response,首先,设置Response的status为401。然后,通过Response的输出流,直接输出json格式的提示信息的字节。
***~~
3、由于提示信息字段较多,我使用了枚举类。但Jackson不能方便的序列化多字段枚举类,所以使用了FastJson和它的SerilizeConfig+枚举泛型,将枚举进行完整json序列化返回。
至此实现了需求。

4、以上方案中手动封装json返回值的部分不够优雅,其实HttpServletResponse已经提供了sendError(int status, String message);方法来返回错误信息给客户端,所以此时就可以直接调用该方法并传递相应参数即可。

在ServletFilter层返回多字段提示给前端

标签:erro   地方   失败   方便   servlet   filter   实现   ror   jackson   

原文地址:https://www.cnblogs.com/JaxYoun/p/12336973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!