IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 京淘项目后端使用的技术 -> 正文阅读

[网络协议]京淘项目后端使用的技术

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();
 		//使用MD5将密码加密
        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){
        //防止与MP方法冲突 业务方法最好添加业务名称
        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;

//1.标识该类是全局异常处理机制.返回值都是JSON串
//  通知: AOP中的技术,解决特定问题的
//  特点: 该异常处理机制,只拦截Controller层抛出的异常
@RestControllerAdvice
public class SystemExe {
    /**
     * 说明:  需要为全局异常定义一个方法.
     * 要求:  返回的统一的业务数据 SysResult
     * 拦截:  指定遇到某种异常实现AOP处理.
     * 注意事项: 在业务方法中不要随意添加try-catch
     */
    @ExceptionHandler({RuntimeException.class})
    public SysResult fail(Exception e){
        e.printStackTrace();
        return SysResult.fail();
    }
}

4 Spring中的事务控制

4.1 事务特性

  1. 原子性: 要么同时成功,要么同时失败(不可分割)
  2. 隔离性: 多个事务之间相互独立,互不干扰
  3. 一致性: 保证数据是的一致(脏读/幻读/不可重复读)
  4. 持久性: 一旦事务提交,就应该持久化保存

4.2 Spring中默认事务策略

说明: Spring整合Mybatis之后,业务层执行没有事务的支持. 如果按照这样的方式执行业务,必定出问题.

//问题: 数据是否真的被删除????? A 删了 
    @Override
    public void deleteUserById(Integer id) {
        userMapper.deleteUserById(id);
        int a  = 1/0;
    }

4.3 Spring添加事务@Transactional

 /**
     *  问题: 数据是否真的被删除?????
     *  解决方案: @Transactional
     *  作用:
     *      1.默认条件下,只拦截运行时异常
     *      2.rollbackFor: 指定异常的类型回滚 rollbackFor = RuntimeException.class
     *      3.noRollbackFor: 指定异常不回滚  noRollbackFor = RuntimeException.class
     */
    @Transactional
    @Override
    public void deleteUserById(Integer id) {
        userMapper.deleteUserById(id);
    }

5 数据自动填充功能

需求说明: 如果用户操作每次都需要自己手动操作时间,则代码相对繁琐.
优化手段:

  1. 新增操作时 创建时间/修改时间需要填充 insert
  2. 更新操作时 操作修改时间 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 反向代理特点

  1. 代理服务器介于用户和服务器之间.
  2. 用户以为反向代理服务器就是目标服务器.
  3. 用户不清楚真实的服务器到底是谁!
  4. 反向代理服务器保护了目标服务器的信息 所以也称之为"服务器端代理".

6.1.3 反向代理案例

在这里插入图片描述

6.2 正向代理

6.2.1 正向代理概念

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

6.2.2 正向代理特点

  1. 正向代理服务器 介于用户和服务器之间
  2. 用户将请求发送给代理服务器,并且指定目标服务器.
  3. 目标服务器以为是代理服务器访问的,保护了用户的信息,所以也称之为 “客户端代理”

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特点

  1. 占有内存少,不超过2M tomcat服务器为200M
  2. 并发能力强3-5万/秒 tomcat服务器为220-250个/秒
  3. 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的根目录中运行

  1. 启动: nginx start nginx
  2. 重启: nginx nginx -s reload
  3. 关闭: nginx nginx -s stop
    注意事项: nginx的运行只能启动一次,如果启动多次则会产生多余项,影响程序的正常运行
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:21:50  更:2021-12-05 12:23:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:00:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码