单例模式
确保一个类只有一个实例,并提供一个全局访问点,日志记录器、配置管理器等。
工厂方法模式
实现解耦
抽象工厂模式
策略模式
策略+工厂
责任链模式
拦截器、过滤器
单点登录
Cookie,Session,Jwt,token
cookie
客户端向服务器发起请求,在服务器通过账号密码验证之后,将username 返回存储到浏览器的cookie 中,每次请求携带这个cookie
问题:cookie 是依赖于客户端浏览器的,又被篡改的风险;cookie 大小只有4kb ;用户可能会禁用cookie
session
客户端向服务器发起一个登录情书,服务器验证账号密码通过后,在服务器session 中保存用户名,然后在相应中添加一个setcookie 存储session id 客户端自动保存到session中,每次请求携带这个cookie 到服务器中验证
问题:session 仍然依赖于浏览器的cookie 的;
session保存在服务器端,会占用服务器的空间;在集群分布中存在一些问题,比如,我们再登录时候访问服务器1,里面保存了我们的session 信息,但是我们下一次请求可能请求的是服务器2,但是服务器2中没有我们的session 信息,它就认为我们没有登录。
jwt
客户端向服务器发起一个登录情书,服务器验证通过后,生成一个token ,返回给前段,eoken包含三个部分
header 存放算法和jwt类型,
payload 存放数据,不能存放私密数据,因为他是没有加密的,
signature 保存前将部分经过base 64编码得到数据相加再加上私钥,经过header中算法加密得到的,保证jwt 安全性
后面每次请求在请求头中携带这个token,后端验证后signature,放行。
权限
棘手问题
SQL优化
在项目完成的初期,项目的性能还是可以的,但是当数据积累到一定量的时候,数据库的查询速度变慢,我们分析发现时SQL性能存在问题,我们对所有的SQL进行和检查和优化,使用explain来查询SQL的执行计划,查看索引命中情况,找出潜在的性能瓶颈并进行相应的调整。主要是做了一下的优化:
1、选择合理的字段类型,char固定长度字符串,varchar可变长度字符串
2、尽量避免使用select来查询数据,使用select查询不能走覆盖索引,会产生回表。
3、用户表和订单表(订单表>用户表)小标驱动大表(in用于左边大表右边小标表,exists适用于左边小表,右边大表)
4、连接查询(join)来代替子查询
5、不使用!= 操作符,使用in代替
6、避免使用%开头的模糊查询