开发杂论
-
开发规范-Restful:表述性状态转换,一种软件架构风格。

http动词(描述方式)描述操作(增删改查)



-
开发流程:

-
JavaWeb开发
-
如果你的接口请求方式只限制在GET、POST等的某一种中,你需要去你的requestMapping中修改method属性,或者我们改变注释为@GetMapping等等都可以
-
controller层是需要调用service的,因此需要在controller中定义一个service对象
-
前端发送请求后调用到controller方法,controller层调用service获取数据,而service不能直接访问数据库,因此要定义一个mapper对象通过接口访问数据库来查询数据,并把查询信息封装在@Select或其他注释修饰的语句里,并把信息返回给service,service返回给controller里,controller拿到数据后返回给前端

-
nginx默认占用的是localhost:90端口
-
日志:
private static Logger log = LoggerFactory.getLogger(DeptController.class); //定义日志对象
log.info("查询全部部门数据"); -
@RequestParam的属性defaultValue可以来设置参数的默认值
-
分页查询遇到困难了?可以使用mybatis的分页查询插件PageHelper
-
在一个员工管理系统中,我们需要上传员工图片,也就是上传文件:
为了实现文件上传,前端需要具备三要素:1.type=file2.请求方式为post3.表单格式修改为multipart/form-data
在后端,请求通过url申请后,为了接受一个file类型的请求参数,可以通过api:MultipartFile定义一个变量接受文件,在这个过程中,如果采用打断点的形式,我们会发现产生了临时文件,但是程序执行完之后临时文件就不见了,因此我们需要把文件存储起来
1.文件本地存储:服务器端接受上传的文件后,将文件存储在本地服务器磁盘中
在uploadcontroller中,运用image.transferTo转存到某个磁盘目录下

为了正确存储不同的文件,我们需要获取其文件名并保存在目录下:

又由于如果上传两次的文件名相同的话,就会导致后一次上传的文件覆盖上一次,因此需要构造唯一的文件名,--uuid(通用唯一识别码),又由于该识别码无文件后缀名,因此需要用一些方法获取文件的后缀名。


- 在springBoot中,默认文件上传大小单个最大为1M,如果需要更大:

- 问题:因为存储在本地,浏览器是无法直接访问的,服务器磁盘满了不方便扩容,磁盘坏了不方便
- multipartfile各种方法:

2.文件阿里云oss存储:对象存储服务

集成阿里云oss上传文件工具类
- 在springBoot中,默认文件上传大小单个最大为1M,如果需要更大:
-
在开发一个项目时,我们常常会遇到参数反复调用的情况,不方便集中维护,我们可以用配置文件的方法存放参数,并在所需要的地方,利用@Value进行属性注入

但是发现一个一个用value去注入很麻烦,因此我们想做到自动注入,首先,实体类中参数的名称要和配置文件中的名称一样,写好get、set方法,并用@configuration(prefix="前缀") 完成自动注入。

-
yml配置文件,也可以是yaml,它的属性配置形式是属性:值,同时,层级之间冒号和缩进表示层级
例如,在properties和yml中servert.port 属性值为8080如下配置:

yml语法:

yml数据格式:

-
登录校验
当我们实现登录功能之后,很容易发现我们并没有做更多判断保证每次访问都是登录的,因此我们很自然的会想到写一个登录状态参数记录是否登录,但是每次请求时都需要在各个controller判断一下是否登录,很麻烦,因此我们采用的时统一拦截的功能。
在登录成果后,生成令牌返回给前端,而客户端请求到达服务器端后,对令牌进行统一拦截,校验。

1.会话技术:浏览器与服务器的一次连接称为一次会话,一次会话可以包含多次请求和响应会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次的请求是否来自于同一浏览器,以便于在同一次会话的多次请求间共享数据
- 会话跟踪方案:
- 客户端会话跟踪技术:cookie:储存在客户端服务器
优点:http协议中支持的技术,可自动进行

缺点:移动端app无法使用cookies,不安全,用户可以自己禁用cookies,cookies不可以跨域(跨域区分三个维度:协议,ip、端口,三个任意一个不一样就是跨域)

- 服务端会话跟踪技术:session:存储在服务器端

优点:存储在服务器端,安全
缺点:在服务器集群的情况下无法使用session,同时具有cookies的所有缺点 - 令牌技术
优点:支持pc端和移动端,解决集群环境下的认证问题,减轻服务器端存储压力
缺点:需要自己实现
- JWT令牌:用户身份的标识,本质上还是一个字符串(JSON Web Token):定义了一种简洁的,自包含(看似随机的字符串,可以自定义存储内容)的格式,用于在通信双方以json数据格式安全的传输信息,由于数字签名的存在,所以这些信息是可靠的。
* 组成:


将这些信息通过base64编码格式编码成下面的字符串

- 客户端会话跟踪技术:cookie:储存在客户端服务器
- 场景:1.登录认证:登录成功后生成令牌,后续每个请求都要携带jwt令牌,系统在每次请求处理之前都要先校验令牌,通过后再处理。
- JWT-生成:1.引入依赖2.调用api生成和校验

同样的,我们可以调用Jwts这个工具类对令牌进行解码:
- 注意事项:jwt校验时使用的签名密钥必须和生成jwt令牌时使用的密钥时配套的,如果jwt令牌解析时报错,则说明jwt令牌被篡改或失效了,令牌非法。
3.过滤器Filter:统一校验jwt令牌

1.定义过滤器filter:定义一个类,实现Filter接口,并重写其所有方法
2.配置filter,filter类加上@WebFileter注解,配置拦截资源的路径。引导类上加@ServletComponenntScan开启Servelet组件支持。
3.拦截完请求之后还需要放行,否则不会有任何结果。利用filter给我们提供的一个api(FilterChain)中的方法,doFilter方法,直接调用doFilter(request,response)。
放行完访问对应的资源,资源访问完成之后,会回到Filter中,不会重新执行,只会执行放行之后的逻辑。
过滤器链:一个web应用中可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。

4.拦截器interceptor:统一校验jwt令牌

1.定义拦截器,实现handlerInterceptor接口,并重写其所有方法

2.注册拦截器(配置拦截器),在实现接口的时候,可以按住ctrl+o,快捷键生成所有方法的复写。

3.拦截路径




- 注意事项:jwt校验时使用的签名密钥必须和生成jwt令牌时使用的密钥时配套的,如果jwt令牌解析时报错,则说明jwt令牌被篡改或失效了,令牌非法。
- 会话跟踪方案:
-
异常处理
利用全局异常处理器

-

浙公网安备 33010602011771号