在RESTful风格的系统中,由于后端没有session等持续性状态信息,所以每次前端的请求都必须携带认证信息。
那我们就需要一个全局的统一处理,来为请求加上认证所需的信息。
以下是我的实现方法:
在Angular中可选的方法有两种:
- 自己实现一个Http拦截器
- 在官方Http模块的基础上封装自己的Http服务
自己实现一个Http拦截器
定义自己的拦截器
|
|
这里提供两个方法,分别对请求和响应进行处理。
for example:添加统一的请求头、对结果进行预处理和错误进行全局统一处理
实现ConnectionBackend抽象类
Angular的HTTP服务默认调用XHRBackend作为第一个参数构建的
所以我们需要自己重新封装XHRBackend服务,在其中对HttpInterceptor的方法进行调用
封装Http工厂
这里就体现出依赖注入的好处了,在不改变原有代码的基础上就能替换掉Http提供类,避免了大面积重构。
在appModule中声明提供器即可
http拦截器配置完成
接下来就只需要通过拦截器向请求头添加认证信息就好了
我自己的后端使用的是shiro进行授权认证,前端的实现思路很简单
|
|
通过配置路由守卫实现AuthorizationService中认证信息为空时路由到401页面,服务器返回401时通过拦截器路由到401页面
封装自己的Http服务
在http模块的Request方法基础上进行封装
此方法优点在于可以单独对get,put,post,delete等请求单独定义预处理方法
缺点在于使用不方便,可能需要大量重构,因为自己封装的HttpService依赖于官方的Http模块,
而如果以Http作为提供器的名称的话无法正常引用官方的模块
具体实现就不写了
有好的方法解决使用不便的问题的话欢迎指教~