LockSupport详解
概念
LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。
LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程。
使用三种让线程等待和唤醒的方法
synchronized+wait+notify
lock+await+signal
LockSupport+park+unpark
JUC之synchronized和Lock | Kylin (codekylin.cn)
使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程。
使用JUC包中的Condition的await()方法让线程等待,使用signal()方法唤醒线程。
LockSupport类可以阻塞当前线程已经唤醒指定被阻塞的线程。
synchronized
123456789101112131415161718192021222324252627282930package com.kylin;/** * @author kylin */public class SynchronizedDemo { stat ...
SpringBoot整合shiro
环境搭建引入shiro依赖
123456<!--引入shiro整合springboot依赖--><dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-starter</artifactId> <version>1.5.3</version></dependency>
1.创建配置类
12345678910111213141516171819/** * 用来整合shiro相关的配置类 */@Configurationpublic class ShiroConfig { //1.创建shiroFilter 负责拦截所有请求 @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurity ...
shiro的授权
授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
关键对象授权可简单理解为who对what(which)进行How操作:
Who,即主体(Subject),主体需要访问系统中的资源。
What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为t01的商品为资源实例,编号为001的商品信息也属于资源实例。
How,权限/许可(Permission),规定了主体对资源的操作许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号为001用户的修改权限等,通过权限可知主体对哪些资源都有哪些操作许可。
授权流程
授权方式基于角色的访问控制RBAC基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制
123if(subject.hasRole("admin")){ //操作什么资源}
基于资源的访问控制RBAC基于 ...
Jenkins介绍
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动 化构建、测试和部署等功能。官网: http://jenkins-ci.org/
Jenkins的特征
开源的Java语言开发持续集成工具,支持持续集成,持续部署。
易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven, docker等。
持续集成
软件开发生命周期软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试 和部署过程的集合。如下图所示 :
需求分析
设计
实现
测试
进化
需求分析
这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部 或者客户提出的。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。 还要分析项目的预算多长,可以从哪方面受益及布局,这也是项目创建的目标。
设计
第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个项目 计划。计划可以使用图表,布局设计或者文者的方式呈现。
实现
第三阶段就是实现阶段,项目经理创建和分配工作给开者,开发者根据任务和在设计阶段定义的目标进 行开发代码。依据项目的大小和复杂程度,可以需要数月或更长时间才能完成。
测试
测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。
进化
最后进阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修 改,bug修 ...
MD5和盐加密
概念MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5算法不可逆只有加密过程没有解密过程
加密内容相同无论加密多少次生成结果始终一致
因为这两个特性所以,我们使用MD5加密时,数据库保存的密码应该是加密过的,当用户登录时,将输入的密码进行MD5加密,加密后进行比较是否相等。相等则密码正确!
同时因为加密内容相同无论加密多少次生成结果始终一致,所以一些简单的密码是能被破解的,例如123,它的密文就是202cb962ac59075b964b07152d234b70。原理就是这些破解网站对通过穷举字符组合的方式,创建了明文密文对应查询数据库。
https://www.cmd5.com/
为了防止这种情况,可以对它进行多次散列,或者salt盐加密。
盐加密盐(Salt),在密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为 “加盐”。其作用是让加盐后的散列结果和 ...
CommandLineRunner和ApplicationRunner
在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接,netty-socketio服务启动。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执行时机为容器启动完成的时候。
使用这两个接口中有一个run方法,我们只需要实现这个方法即可。这两个接口的不同之处在于:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。目前我在项目中用的是CommandLineRunner。是这么实现的:
1234567891011121314jav@Component@Slf4jpublic class StartRunner implements CommandLineRunner { @Autowired SocketIOServer socketIOServer; @Override public ...
shiro的认证
身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。
关键对象
Subject:主体
访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;
Principal:身份信息
是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。
credential:凭证信息
是只有主体自己知道的安全信息,如密码、证书等。
认证流程
认证的开发1. 创建项目并引入依赖12345<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.5.3</version></dependency>
2. ...
shiro权限框架
权限的管理什么是权限管理基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。
权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
什么是身份认证身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。
什么是授权授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。
什么是shiro
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cr ...
设计模式之简单工厂模式
概念简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
值得注意的是,简单工厂模式并不属于23种GOF设计模式之一。但是他是抽象工厂模式,工厂方法模式的基础,并且也有广泛的应用。
用途在介绍简单工厂模式之前,我们尝试解决以下问题:
现在我们要使用面向对象的形式定义计算器,为了实现各算法之间的解耦。主要的用到的类如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263// 计算类的基类public abstract class Operation { private double value1 = 0; private double value2 = 0; public double ...