ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

京淘项目后端使用的技术

2021-12-03 19:31:08  阅读:114  来源: 互联网

标签:项目 技术 代理服务器 用户 nginx Session 反向 使用 服务器


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的运行只能启动一次,如果启动多次则会产生多余项,影响程序的正常运行

标签:项目,技术,代理服务器,用户,nginx,Session,反向,使用,服务器
来源: https://blog.csdn.net/licong896421631/article/details/121695435

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有