回忆一下近期做项目,主要有Oauth2
的授权认证、语音控制python
转Java
、大屏天气转换V3
、AOP
后端解密加密。
Oauth2
的授权认证
对于OAuth2
授权是第三方应用想控制我的设备,需要先到我这里获取权限,在获取权限的过程中会弹出一个授权框,输入用户名和密码实现授权。蛮复杂的,涉及到的东西蛮多,Spring security
这个过滤器链,蛮复杂,需要自己找到切入点,加入自己的东西;涉及到用什么来生成授权码Code
,用什么来存储token
,这个也是唯一一个能在界面上体现的项目。
语音控制python
转Java
这个项目的出发点就是为了在获取后台日志的时候能加快速度,应用之前的python
代码会多走一段路,才到我们的服务器,会等个10s
;在转换的过程中,就是python
中的json
形式的response
蛮多,在Java
中需要定义对应的dto(data transfer object)
,还有在函数中的第三方请求,在项目中用了restTemplate
,可以实现get
、post
的请求,该项目已经转换完毕,但是还需要仔细的测试,我感觉这一步是比较难的。
大屏天气转换
这个是之前的中间服务器要关闭了,所有需要自己直接去请求终点服务器,需要完善接口,对此在原有的controller
,package
中增加了接口,实现对需要返回元素的填充;但是这个程序用到了Hbase
、Zookpeer
,每个dao
都用到了相应的注解,并且这些端口都已经被封了,所以经过讨论,从APP
端去访问,即从上一层服务去请求;为了填齐元素,需要http
请求三个原有的接口,根据现在所了解可以有几种方式:
httpClient
:这个直接跳过了restTemplate
:最常见的是这个,比如restTemplate.getForObject(url,String.class)
这样,还有MltiValueMap
来传递参数。webClient
:依赖于webFlux
这个包,集成性比较好,常用build
来建立连接,可以使用block()
,subscribe()
实现异步。
刚开始是用restTemplate
实现了get访问,因为用多个访问,所以使用到了异步执行,刚开始是用到了webClient
的,但是出了点问题,空指针异常。之后是借用了同事写的actionAsync
,用于实现设备群控,借此,我用到了,在程序中CompletableFuture
,supplyAsync
,CompletionStage
,先建立连接,需要返回的类型,之后.join()
实现执行,在程序中使用到lambda
表达,可以实现异步结果的顺序性,即执行完之后,结果会返回到对应的位置。
AOP加解密
在项目中已经是第二次遇到解密和加密的问题,对前端传来的数据进行解密,接着进行逻辑处理,之后处理的结果进行加密返回给前端。因此,想通过AOP
注解的方式把代码抽取出来,想用就用。在AOP
中使用了环绕增强;在增强类中,对于appId
、signature
是放在头部的,利用request
去获取,这里获取只能获取一次,如果想用同样的方法获取body
就不行了,所以需要将所有的东西进行备份,放在缓存中,实现多次获取。对于body
的获取是利用了反射的方式。