shiro快速上手脚手架

项目地址为https://gitee.com/cangjingge/shiro

只需要自己实现实现bootstarp引导包下面的三个类;

1.AbstractShiroService(该抽象类中有两个方法需要实现,一个根据登录名查询用户基本数据,一个用于初始化所有url访问时需要的角色列表)

还有一个已经刷新权限缓存的方法updatePermission,在修改了系统权限配置后可以调用刷新权限缓存数据。

2.ShiroUrlRoles(url和角色关联数据,为一对多)

3.ShiroUser(用户数据,其中需要保护该用户有哪些权限)

三者实现在demo包下都有。自己根据业务实现即可

netty学习笔记

1.对比学习

ionionetty
数据载体直接从io流中读取Buffer Buffer
链接(io)模型java io模型channel channel
线程模型一个连接占用一个线程多个链接由一个线程进行处理
多个链接由一个线程进行处理
新连接处理方式监听有新请求,到达后占用一个线程处理数据请求,同步处理读写监听新请求和读取数据分离,异步读写数据

监听新请求和读取数据分离,异步读写数据
优点freehardbeautiful
缺点浪费性能难以上手,不好维护,有bug不告诉你
特性自己玩懒得说1.一个请求(channel)可以交给一个
pipeline 链路 进行流水线式的业务处理,流水线的每个节点都是一个
channelHandler ,
channelHandler 是用于做数据读写的具体代码,重写相应的方法即可,而且netty帮我们实现了很多开箱即用的handler,让我们可以轻松地进行,粘包拆包,编解码,心跳检测等等。2.在chanel中数据是封装成
Buffer 来进行传递的,Buffer就可以理解为一个很好用的包装,提供各种爽到爆炸的api

2.总结

1.Socket编程中的链接是各种inputstream ,netty中对应的是channnel,

2.Socket编程中数据是从各种inputstream 中直接读取的,netty中是封装成Buffer然后从buffer中进行读取的。buffer提供了各种api

3.netty为了让我们对一次请求的数据可以更优雅的进行各种加工,设计了
类似流水线 的pipeline链路让我们可以对一次请求进行多次加工处理。每次加工处理交给一个 channelHandler来处理。 channelHandler 对应流水线中的各个加工节点

4. channelHandler 中我们只需要重写接口中的相应方法,通过方法入参即可拿到我们想要的请求对象( channel )和数据对象(Buffer)

适配器模式

定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本的接口不兼容的类可以合作无间

适配器模式的理解可以类比现实中的适配器,比如笔记本电脑的电源适配器,作用就是将插座上220v的交流电转换为笔记本可以直接使用的电能。那么代码中,适配器就是把一个接口转换为另一种标准来提供服务。

这种模式简单,但是十分强大有力。任何简单的东西都是优美的。

策略模式

定义:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

目的:通过组合,面向接口,等等手段来应对日常开发中可能会出现频繁变化的情况。达到通过扩展和组合应对变化,优雅的保护稳定代码,对修改封闭;

定义算法族就是把某一类行为抽象成接口,在类中通过组合的方式把接口组装到类中,当业务出现变化的时候,就可以通过动态组合算法具体实现来应对变化的情形。

应用场景:以常写的mvc三层模式来举例子,一般的controller都需要有一些通用的方法,例如获取当前登录用户,获取request参数列表等等方法;这些是不变的部分,可以封装到一个BaseController的父类中,但是每个Controller又可能需要提供各种各样的不同的服务,查询不同的表。同时也会有两个不同的Controller里面需要查询相同的表;这时候就可以将这些变化的部分封装为算法族,也就是service,通过接口的方式进行组合。运行时按照需要注入相应的实现即可;

下面来看应对一种变化的情况,例如之前某个service的实现是查询的数据库中的数据,现在数据来源变成了通过接口服务获取的,那么我们只需要对这个service再做一个实现,重新组装到原来的Controller中去即可。原先稳定的代码不需要做修改,可以说我们是对代码做了扩展,然后做了重新组合,提高代码复用度;以优雅的方式实现对接口拔插;

以上 –jason 20190103

rsa和aes实现编程式动态加密思路

一、对比学习来认识两种加密方式

RSA(三位发明者名字)AES(Advanced Encryption Standard高级加密算法)
加密类别非对称加密对称加密
安全性抵抗到目前为止已知的绝大多数密码攻击对称密钥加密中最流行的算法之一
加密原则公钥加密,私钥解密;私钥加密,公钥解密同一个秘钥加密的只有同一个秘钥能解开
加密效率加密效率较慢但是安全级别很高加密效率较快安全级别相对较高
总体介绍(可以不读很无聊)之所以叫 RSA算法,是因为算法的三位发明者RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准,主要的算法原理就不多加介绍,如果对此感兴趣的话,建议去百度一下RSA算法。需要了解的是RSA算法属于非对称加密算法,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。简单的说是“公钥加密,私钥解密;私钥加密,公钥解密”。高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

二、动态加密实现方式

加密对象为http请求中要传输的数据,现在讲的是一个动态加密的流程;

1.第一步用AES对内容进行高效加密       首先要对数据进行加密,由于传输的内容数据量一般会比较大,加密时应当选择加密效率较高的AES(对称加密)对内容进行加密。然后通过http进行传输,首先在客户端随机生成一个AES key,然后用这个随机的key对内容进行高效率加密。加密完成之后把数据发送到服务端,这个时候你肯定发现问题了,我把内容发送到了服务端我没有那个随机的key我怎么解密呢,是的我们要想办法把这个AES KEY发送到服务端。那么我们直接明文发送这个key行不行呢?当然是不行的,被拦截之后别人可以直接拿这个key对内容进行解密,那我们之前的工作就等于功亏一篑了。那么我们看第二步骤。主角登场。

2.第二步用RSA 公钥对上一步的key进行加密传输       这里我们用RSA的公钥对上一步的AES key进行加密,由于AES key比较短,所以加密不会消耗太久,这点可以放心。把AES 的随机key加密之后我们就可以安心的在网络中进行传输了,这个随机的key的解密是需要RSA的私钥才能解密的(公钥加密,私钥解密;),但是这个私钥只有我们服务端才有,其他任何人都不可能有。所以这个私钥一定要好好保管不能泄露。下面看第三步

3.第三步用RSA私钥解密AES KEY并用解密后的AES KEY对传输的私密数据进行解密,拿到数据,完成一套安全的数据传输。
这里只讲到了从客户端发送给服务端的原理,那么服务端发送给客户端的时候如果数据也比较私密我们怎么处理呢。其实能看到这里我相信你已经有了自己的想法了,刚刚我们用到的那个aes key,这时候已经同时存在服务端和客户端了,这时候返回的数据只需要在服务端用AES加密发送给客户端,然后客户端用这个AES KEY直接进行解密即可。当然如果响应数据不是私密数据,你完全可以不用加密。

linux常用命令

1.软件包管理:yum

安装 yum install xxx

卸载 yum remove xxx

搜索 yum search xxx

清缓存 yum clean packages

列出已安装裂变yum list

软件包信息yum info xxx

2.服务器硬件资源信息

内存:free-m m表示以m为单位进行展示

硬盘:df-h h表示以humen能看懂的方式进行展示

负载: w/top

w命令load average:1分钟,5分钟,15分钟的负载值

top命令按q退出

查看cpu信息 :cat /proc/cpuinfo

fdisk格式化磁盘命令

3.文件操作命令

在linux下面一切皆文件

linux文件的目录结构

根目录/

家目录/home  ~当前用户的家目录

临时目录/tmp

配置目录/etc

用户目录/usr

ls -al列出所有文件包含隐藏文件=ll

文件基本操作

ls 查看目录下面的文件

touch新建文件

mkdir新建文件夹 -p创建多层

cd进入目录

rm 删除文件或者文件夹 -r删除多层 -rf 强制删除

cp复制 cp ./srcfile  ~/tofile

mv移动剪切

pwd显示当前目录

文本编辑程序vim

安装命令 yum install vim

vim 文件名打开文件   按i开启插入模式  esc退出插入模式 输入: wq保存并退出

vim开大模式下gg表示移动到行首G表示移动到行尾,dd表示删除一行(u恢复)

yy某一行,移动光标按p可以拷贝一行

文件权限421

文件搜索查找读取

文件压缩解压