书一直都有在读,我会一直更新博文,欢迎大家前来阅读、指教!
XML和注解
xml:应用于集中配置的场合,比如数据源的配置;
注解:像@Controller、@RequestMapping、@Transactional这样的注解,更适合与java方法写在一起,显得简单而直观;
所以就很快兴起了xml和注解的混合使用。
SSO单点登录
1、首次登录
首次登录后,浏览器就会保存sso.com的cookie
2、验证ticket
CAS是一个著名的SSO(单点登录)解决方案
单点退出
用户在一个系统退出了,认证中心需要把自己的会话和cookie消灭,然后还要去通知各个系统,让他们也把自己的会话统统消灭,这样才能在所有的系统中都实现真正的退出。
从密码到token,一个有关授权的故事
授权码+token
注:获取token的过程是在服务器后台完成的,浏览器接触不到
需要注意的一个问题:由于浏览器接触到了授权码,所以存在安全问题?
解决方法:第一种---设置授权码的失效时间;第二种---设置授权码只能用来申请一次token
Redis
1、数据结构
List 列表
Set 集合
Sorted Set 有序集合
Hash 包含键值对的无序散列表
2、Hash槽(Hash Slot)
共16384个槽,采用了一种CRC16算法:先对key产生一个整数值,再对16384求余数
优点:在Redis集群中,很好的解决了在增、删缓存服务器时的缓存失效问题
3、故障转移
为了使Redis集群支持故障转移,提供了master-slave功能,当Hash被均匀的分成几个小组服务器,其中每个服务器都有一个master节点和多个slave节点组成,其中master节点的数据与slave节点的数据始终保持一致,对数据的操作都是在master节点中操作的,slave节点只作为备份存在,一旦master节点挂掉,其中的一个slave节点就会替换它,成为一个新的master,依然可以正常工作。
4、缓存服务器的优点
缓存服务器之间可以互相通信,保证数据的完整性;(Hash槽)
支持服务器动态的增加和删除;(Hash槽)
还支持缓存数据的备份和故障转移。(master-slave)
Nginx(web服务器)
实现了高可用,即集群
keepalived------将多个Nginx形成一种master-slave结构(对外只提供一个IP地址)
Tomcat(Tomcat服务器)
实现了高可用,即集群
实现集群过程中,存在的问题:一个tomcat挂掉,他所拥有的session也会丢失,如何解决?
解决方案:将tomcat中的session放入Redis集群
数据库
实现了高可用,即集群,实现方式----读写分离
一个master库:可读可写,以写为主
多个slave库:只能读,不能写
注:master库与slave库的数据要保持一致
如何实现数据库事务的隔离?
X锁和S锁应运而生
X锁----排他锁,写数据的时候用
S锁----共享锁,读数据的时候用
读写分离的好处:极大地缓解了程序对X锁和S锁的争用
数据库的读写分离伴随而来的一个问题是:tomcat的访问比较麻烦,如何解决?
解决方案:在tomcat与数据库之间添加一个中间层,tomcat只需要正常的向中间层发出请求,具体的操作如:在程序中找到写数据的操作,发到master库去执行,找到读数据的操作发到指定的slave库去执行,这些繁琐的事情交给中间层去解决。
加解密技术
分类:对称加密、非对称加密
1、对称加密
对信息的加密和解密都使用相同的密钥key,即:使用同一个密钥key对数据进行加密和解密(需要交换密钥key,交换过程中存在安全问题)
2、非对称加密
密钥被分解为一对,一个公开密钥(PK),一个私有密钥(SK)。公钥可以通过非保密方式向他人公开,而私钥则由解密方保存,不对外公开。(发送信息的一方通过公钥对数据进行加密,然后发送给接收方,接收方通过私钥对密文进行解密)
优点:可以使通信双方无需事先交换密钥就可以建立安全通信。
下面简要介绍下RSA:
RSA(公钥加密算法)
用于数据的加密和数字签名
1、选择两个素数P、Q |
---|
2、N=PQ |
3、T=(P-1)(Q-1) |
4、选择一个整数E,使 E<T 且 (E,T)=1 |
5、由DE mod T 三 1 得出 D (mod 代表取余) |
6、得到公钥(N,E),私钥(N,D) |
公钥加密算法:
1、公钥N,E
2、密文C
3、明文M
公式:C 三 M的E次方 mod N
私钥解密算法:
1、私钥N,D
2、密文C
3、明文M
公式:M 三 C的D次方 mod N
发送者A(RSA私钥) | 接收者B(RSA公钥) | |||||
明文M | ---> | 签名DSKA(M) | ---> | 恢复EPKA(C) | ---> | M |
比较M' = M |
除A外没有别人能具有A的私密密钥SKA,所以除A外别人不能产生密文DSKA(M),这样,报文M就被签名了;B只能用持有的公钥进行解密,以实现核实A对报文的签名。
心灵鸡汤
到尽头为止,这本书我已经大致看了一遍。初次阅读,在理解上可能还停留在表面,在以后我还会反复去阅读,正所谓:书读百遍,其义自见。
1、对新技术要充满好奇心,积极去学习。在现今这个技术更新飞快的时代,如果不实时更新自己的数据库,就会很快被这个行业所淘汰。
2、敢于去挑战自我能力之外的东西。当机会降临的时候,要勇敢地抓住它,当然在去做的时候会遇到很多的问题,但它会引导你去疯狂的学习,最后你就会发现自己登上了更高一层的台阶。
3、学东西要有追根溯源的喜好。想要对某个技术有更深层次的理解,就要明白这几点:为什么要有这门技术、这门技术解决的什么、如何使用这门技术。