java filter 是否能拦截到form表单的所有数据_Spring Boot使用过滤器和拦截器分别实现REST接口简易安全认证...

本文通过一个简易安全认证示例的开发实践,理解过滤器和拦截器的工作原理。

很多文章都将过滤器(Filter)、拦截器(Interceptor)和监听器(Listener)这三者和Spring关联起来讲解,并认为过滤器(Filter)、拦截器(Interceptor)和监听器(Listener)是Spring提供的应用广泛的组件功能。

但是严格来说,过滤器和监听器属于Servlet范畴的API,和Spring没什么关系。

因为过滤器继承自javax.servlet.Filter接口,监听器继承自javax.servlet.ServletContextListener接口,只有拦截器继承的是org.springframework.web.servlet.HandlerInterceptor接口。

373e096da76249a0ae9e8cbf37232cbc

上面的流程图参考自网上资料,一图胜千言。看完本文以后,将对过滤器和拦截器的调用过程会有更深刻理解。

一、安全认证设计思路

有时候内外网调用API,对安全性的要求不一样,很多情况下外网调用API的种种限制在内网根本没有必要,但是网关部署的时候,可能因为成本和复杂度等问题,内外网要调用的API会部署在一起。

实现REST接口的安全性,可以通过成熟框架如Spring Security或者shiro搞定。

但是因为安全框架往往实现复杂(我数了下Spring Security,洋洋洒洒大概有11个核心模块,shiro的源码代码量也比较惊人)同时可能要引入复杂配置(能不能让人痛快一点),不利于中小团队的灵活快速开发、部署及问题排查。

很多团队自己造轮子实现安全认证,本文这个简易认证示例参考自我所在的前厂开发团队,可以认为是个基于token的安全认证服务。

大致设计思路如下:

1、自定义http请求头,每次调用API都在请求头里传人一个token值

2、token放在缓存(如redis)中,根据业务和API的不同设置不同策略的过期时间

3、token可以设置白名单和黑名单,可以限制API调用频率,便于开发和测试,便于紧急处理异状,甚至临时关闭API

4、外网调用必须传人token,token可以和用户有关系,比如每次打开页面或者登录生成token写入请求头,页面验证cookie和token有效性等

在Spring Security框架里有两个概念,即认证授权,认证指可以访问系统的用户,而授权则是用户可以访问的资源。

实现上述简易安全认证需求,你可能需要独立出一个token服务,保证生成token全局唯一,可能包含的模块有自定义流水生成器、CRM、加解密、日志、API统计、缓存等,但是和用户(CRM)其实是弱绑定关系。某些和用户有关系的公共服务,比如我们经常用到的发送短信SMS和邮件服务,也可以通过token机制解决安全调用问题。

综上,本文的简易安全认证其实和Spring Security框架提供的认证和授权有点不一样,当然,这种“安全”处理方式对专业人士没什么新意,但是可以对外挡掉很大一部分小白用户。

二、自定义过滤器

和Spring MVC类似,Spring Boot提供了很多servlet过滤器(Filter)可使用,并且它自动添加了一些常用过滤器,比如CharacterEncodingFilter(用于处理编码问题)、HiddenHttpMethodFilter(隐藏HTTP函数)、HttpPutFormContentFilter(form表单处理)、RequestContextFilter(请求上下文)等。通常我们还会自定义Filter实现一些通用功能,比如记录日志、判断是否登录、权限验证等。

1、自定义请求头

很简单,在request header添加自定义请求头authtoken:

 @RequestMapping(value = "/getinfobyid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值