码农翻身---随笔

书一直都有在读,我会一直更新博文,欢迎大家前来阅读、指教!

XML和注解

xml:应用于集中配置的场合,比如数据源的配置;

注解:像@Controller、@RequestMapping、@Transactional这样的注解,更适合与java方法写在一起,显得简单而直观;

所以就很快兴起了xml和注解的混合使用。


SSO单点登录

1、首次登录

首次登录后,浏览器就会保存sso.com的cookie

2、验证ticket

扫描二维码关注公众号,回复: 3402947 查看本文章

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对报文的签名。

猜你喜欢

转载自blog.csdn.net/weixin_40106067/article/details/81988069