1 MD5加密
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
MD5特点: 1.只能由明文加密为密文,不可逆. 不可破解 2. 目前的破解只能破译其中的某些函数或者是反向查询. 3. md5升级 md5hash = 明文+盐 几乎不可破解 例子: md5(123) = xxxxxxxx md5(123 + lyj) = yyyyyyyyy md5(123lyj+lyj) = zzzzzzzz
byte[] bytes = user.getPassword().getBytes();
String md5Pass = DigestUtils.md5DigestAsHex(bytes);
user.setPassword(md5Pass);
2 Cookie和Session
2.1 业务说明
用户向服务器发起请求,获取服务器的结果.但是请求的生命周期,是一次请求一次响应,如果该请求结束则全部的响应的数据清空. 为了保存服务器的响应数据,应该想办法将服务器数据持久化!!!
2.2 Session说明
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
总结:
1. Session称为“会话控制"
2. Session可以存储用户信息.
3. Session数据的生命周期是整个会话,如果会话关闭 则数据清空.
4. Session的数据结构 是key-value结构.
5. Session存储在浏览器中
2.3 Cookie说明
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
总结:
1. Cookie是一个小型文本文件,存储到本地终端上.
2. Cookie可以存储用户信息.
3. Cookie的数据类型key-value
4. Cookie中的数据一般采用加密的方式保存
5. Cookie的数据可以"永久"保存.
2.4 Session和Cookie选择
特点: 1.如果数据需要临时保存,则选用Session, 如果数据需要长时间存储选用Cookie. 2.如果对于安全性要求较高的数据,选用Session,如果安全性要求不高选用Cookie.
问题: 财务系统用户信息选用什么技术保存信息? 选用session.
3 全局异常处理
3.1 异常说明
说明: 当后台服务器发生异常时,前端用户无法获取异常信息,用户体验差
异常处理:
@DeleteMapping("/{id}")
public SysResult deleteById(@PathVariable Integer id){
try {
userService.deleteUserById(id);
return SysResult.success();
}catch (Exception e){
e.printStackTrace();
return SysResult.fail();
}
}
说明: 如果业务代码中添加了大量的try-catch则会导致业务复杂度变高,不便于维护
3.2 Spring的全局异常处理机制
使用AOP切面编程中的
package com.jt.exe;
import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.sql.SQLException;
@RestControllerAdvice
public class SystemExe {
@ExceptionHandler({RuntimeException.class})
public SysResult fail(Exception e){
e.printStackTrace();
return SysResult.fail();
}
}
4 Spring中的事务控制
4.1 事务特性
- 原子性: 要么同时成功,要么同时失败(不可分割)
- 隔离性: 多个事务之间相互独立,互不干扰
- 一致性: 保证数据是的一致(脏读/幻读/不可重复读)
- 持久性: 一旦事务提交,就应该持久化保存
4.2 Spring中默认事务策略
说明: Spring整合Mybatis之后,业务层执行没有事务的支持. 如果按照这样的方式执行业务,必定出问题.
@Override
public void deleteUserById(Integer id) {
userMapper.deleteUserById(id);
int a = 1/0;
}
4.3 Spring添加事务@Transactional
@Transactional
@Override
public void deleteUserById(Integer id) {
userMapper.deleteUserById(id);
}
5 数据自动填充功能
需求说明: 如果用户操作每次都需要自己手动操作时间,则代码相对繁琐. 优化手段:
- 新增操作时 创建时间/修改时间需要填充 insert
- 更新操作时 操作修改时间 update
package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
@TableField(fill = FieldFill.INSERT)
private Date created;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated;
}
需要添加时间的pojo继承此类
6 代理机制
6.1 反向代理
6.1.1 反向代理概念
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率
6.1.2 反向代理特点
- 代理服务器介于用户和服务器之间.
- 用户以为反向代理服务器就是目标服务器.
- 用户不清楚真实的服务器到底是谁!
- 反向代理服务器保护了目标服务器的信息 所以也称之为"服务器端代理".
6.1.3 反向代理案例
6.2 正向代理
6.2.1 正向代理概念
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
6.2.2 正向代理特点
- 正向代理服务器 介于用户和服务器之间
- 用户将请求发送给代理服务器,并且指定目标服务器.
- 目标服务器以为是代理服务器访问的,保护了用户的信息,所以也称之为 “客户端代理”
6.2.3 正向代理案例
6.3 正向和反向代理特点
用户的每一次请求都包含了正向代理和反向代理机制.
7 Nginx
作用: 反向代理,实现负载均衡
7.1 Nginx服务器介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
7.2 Nginx特点
- 占有内存少,不超过2M tomcat服务器为200M
- 并发能力强3-5万/秒 tomcat服务器为220-250个/秒
- Nginx为c语言 tomcat为java语言
7.3 Nginx下载
7.4 Nginx安装说明
7.4.1 nginx路径说明
路径问题: nginx是c语言开发的所以对中文不友好. 额外需要注意空格 端口问题: 1.Nginx运行的端口是80. 80端口不能被其它的服务占用. 2.如果80端口被其它的服务占用,则通过dos命令 kill 杀死进程. 占用端口: http协议默认端口号80端口. https协议默认端口号443端口
7.4.2 nginx进程项说明
nginx 每次启动都会有2个进程. 一个主进程, 一个是守护进程 主进程: 主要提供反向代理服务. 占用内存空间大 守护进程: 防止主进程意外关闭的. 如果需要关闭nginx 则先关闭守护 再关闭主进程.
7.4.3 nginx命令(重点)
说明: nginx的命令的执行 需要在nginx的根目录中运行
- 启动: nginx start nginx
- 重启: nginx nginx -s reload
- 关闭: nginx nginx -s stop
注意事项: nginx的运行只能启动一次,如果启动多次则会产生多余项,影响程序的正常运行
|