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

网友投稿 645 2022-09-14

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

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

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);方法来返回错误信息给客户端,所以此时就可以直接调用该方法并传递相应参数即可。

学习使我充实,分享给我快乐!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C/C++ VScode 多文件编译配置(undefined reference to 'xxx'错误)
下一篇:「运维有小邓」如何避免企业AD域弱密码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~