在ServletFilter层返回多字段提示给前端
2020-02-20 16:04:36来源:博客园 阅读 ()
在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);方法来返回错误信息给客户端,所以此时就可以直接调用该方法并传递相应参数即可。
原文链接:https://www.cnblogs.com/JaxYoun/p/12336973.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java开发病房管理系统
下一篇:Java线程池中线程的生命周期
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- API接口如何设计,实现统一格式返回? 2020-05-18
- Java8通过Function获取字段名 2020-04-28
- SpringBoot系列(十)优雅的处理统一异常处理与统一结果返回 2020-04-26
- ElasticSearch 常用字段类型 2020-04-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash