<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[STIll_ly的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/STIll_ly</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; STIll_ly]]></copyright><item><title><![CDATA[自定义类的加载器实现热加载]]></title><link>https://blog.csdn.net/STIll_ly/article/details/110633023</link><guid>https://blog.csdn.net/STIll_ly/article/details/110633023</guid><author>STIll_ly</author><pubDate>Fri, 04 Dec 2020 13:33:19 +0800</pubDate><description><![CDATA[一、前文传送门：
JAVA类加载器
JAVA类加载的双亲委派机制
二、前置知识点
1、每个类加载器有自己的名字空间，对于同一个类加载器实例来说，名字相同的类只能存在一个，并且仅加载一次。不管该类有没有变化，下次再需要加载时，它只是从自己的缓存中直接返回已经加载过的类引用。
2、我们编写的应用类默认情况下都是通过 AppClassLoader 进行加载的。当我们使用 new 关键字或者 Class.forName 来加载类时，所要加载的类都是由调用 new 或者 Class.forName 的类的类加载器（也]]></description><category></category></item><item><title><![CDATA[JAVA类加载的双亲委派机制]]></title><link>https://blog.csdn.net/STIll_ly/article/details/110587674</link><guid>https://blog.csdn.net/STIll_ly/article/details/110587674</guid><author>STIll_ly</author><pubDate>Fri, 04 Dec 2020 12:25:47 +0800</pubDate><description><![CDATA[JAVA类加载机制一、类加载器二、类加载器验证三、类的热加载1、同一个类加载器，不会重复加载相同的类。2、不同的类加载器，会重复加载相同的类。四、双亲委派模型
一、类加载器
类加载器负责装入类，搜索网络、jar、zip、文件夹、二进制数据、内存等指定位置的类资源。一个JAVA程序运行，最少有三个类加载器示例，负责不同类的加载。
1、Bootstrap Loader-核心类库加载器。由C/C++实现，无对应的java类。加载JAVA_HOME/jre/lib目录或者用户配置目录下的类。
2、Extension]]></description><category></category></item><item><title><![CDATA[JAVA类加载器]]></title><link>https://blog.csdn.net/STIll_ly/article/details/110631327</link><guid>https://blog.csdn.net/STIll_ly/article/details/110631327</guid><author>STIll_ly</author><pubDate>Fri, 04 Dec 2020 11:12:39 +0800</pubDate><description><![CDATA[在 Java 中，类的实例化流程分为两个部分：类的加载和类的实例化。类的加载又分为显式加载和隐式加载。大家使用 new 关键字创建类实例时，其实就隐式地包含了类的加载过程。对于类的显式加载来说，比较常用的是 Class.forName。其实，它们都是通过调用 ClassLoader 类的 loadClass 方法来完成类的实际加载工作的。直接调用 ClassLoader 的 loadClass 方法是另外一种不常用的显式加载类的技术。
类加载器负责装入类，搜索网络、jar、zip、文件夹、二进制数据、内存等]]></description><category></category></item><item><title><![CDATA[六、Spring Security认证和授权-实现自定义短信验证码登陆功能]]></title><link>https://blog.csdn.net/STIll_ly/article/details/109363309</link><guid>https://blog.csdn.net/STIll_ly/article/details/109363309</guid><author>STIll_ly</author><pubDate>Thu, 29 Oct 2020 16:41:33 +0800</pubDate><description><![CDATA[一、图片验证码验证流程回顾
上期已经实现了图片验证码的功能，我们来回顾一下大概流程：
1、	客户端生成一个唯一标识，然后发起图片验证码请求，请求路径中携带这个唯一标识，例如：http://localhost:8066/auth/code/image/039988e0-1994-11eb-8a54-abdddf75aa45
2、	服务端接收到获取验证码请求，读取请求路径中的唯一标识（例如：039988e0-1994-11eb-8a54-abdddf75aa45）；生成4位随机数作为验证码，合成验证码图片(创建]]></description><category></category></item><item><title><![CDATA[AOP-面向切面编程]]></title><link>https://blog.csdn.net/STIll_ly/article/details/109333128</link><guid>https://blog.csdn.net/STIll_ly/article/details/109333128</guid><author>STIll_ly</author><pubDate>Wed, 28 Oct 2020 15:12:04 +0800</pubDate><description><![CDATA[作为一个Javaer，OOP（面向对象编程）是我们最先接触到并实践的概念，而AOP可能只是听过她的传说，并没有打过照面。今天我们就来一起揭开她神秘的面纱。
一、什么是AOP?
AOP（Aspect Oriented Programming）称为面向切面编程，在程序开发中主要用来解决一些系统层面上的问题，比如日志，事务，权限等，Struts2的拦截器设计就是基于AOP的思想，是个比较经典的例子。在不改变原有的逻辑的基础上，增加一些额外的功能。代理也是这个功能，读写分离也能用aop来做。
OOP面向对象编程，引]]></description><category></category></item><item><title><![CDATA[五、Spring Security认证和授权-实现图片验证码功能]]></title><link>https://blog.csdn.net/STIll_ly/article/details/109294579</link><guid>https://blog.csdn.net/STIll_ly/article/details/109294579</guid><author>STIll_ly</author><pubDate>Mon, 26 Oct 2020 18:09:50 +0800</pubDate><description><![CDATA[一、图形验证码的作用
图形验证码是验证码的一种。验证码（CAPTCHA）是“Completely Automated Public Turing test to tell Computers and Humans Apart”（全自动区分计算机和人类的图灵测试）的缩写，是一种区分用户是计算机还是人的公共全自动程序。可以防止：恶意破解密码、刷票、论坛灌水，有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试，实际上用验证码是现在很多网站通行的方式，我们利用比较简易的方式实现了这个功能。]]></description><category></category></item><item><title><![CDATA[四、Spring Security认证和授权-动态授权解决方案]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108941998</link><guid>https://blog.csdn.net/STIll_ly/article/details/108941998</guid><author>STIll_ly</author><pubDate>Tue, 06 Oct 2020 21:54:54 +0800</pubDate><description><![CDATA[上面两期已经学习了认证和授权的相关知识并且对源码进行了解析，相信这些知识点应付简单系统权限控制已经足够，但是如果想要实现复杂的权限控制，就需要自己进自定义开发了。今天我们来学习一下如何基于Spring Security，实时从数据库里查询用户权限进行权限校验，实现动态权限控制。
一、RBAC简介
动态权限开发以前，我们必须要有一套明确的权限系统。下面我们基于RBAC来讲解具体实现流程。
RBAC(role-based access control)，基于角色的权限控制系统，是指对于不同角色的用户，拥有不同的]]></description><category></category></item><item><title><![CDATA[三、Spring Security认证和授权-授权流程及源码解析]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108932251</link><guid>https://blog.csdn.net/STIll_ly/article/details/108932251</guid><author>STIll_ly</author><pubDate>Mon, 05 Oct 2020 23:02:29 +0800</pubDate><description><![CDATA[上期我们学习了基于UsernamePasswordAuthenticationFilter的表单认证，接下来我们将对Spring Security授权相关知识点进行介绍并进行源码级解析。认证和授权是两个密不可分的好基友，只认证不授权，系统将不知道用户有哪些权限，能进行哪些操作。就像是一个公司只设置了门卫，只要是本公司职员就能进入（认证过程），但是没有明确的规章制度和上下级关系，进入公司以后具体有哪些权利和义务没人知道（授权），将导致公司陷入混乱无法运转。
一、授权表达式
Spring Security允许我]]></description><category></category></item><item><title><![CDATA[二、Spring Security认证和授权-基于表单的认证流程及源码解析]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108926079</link><guid>https://blog.csdn.net/STIll_ly/article/details/108926079</guid><author>STIll_ly</author><pubDate>Mon, 05 Oct 2020 10:08:29 +0800</pubDate><description><![CDATA[学完上期核心原理解析，我们已经知道了Spring Security 是由一系列的过滤器组成，通过拦截指定URL实现用户登录的操作。今天我们基于Spring Security 自带的UsernamePasswordAuthenticationFilter过滤器进行表单验证的开发。
一、表单验证过程源码解析

1、页面输入用户名密码，提交登录请求。
2、登陆请求被UsernamePasswordAuthenticationFilter过滤器拦截，开始进行登录验证。
3、UsernamePasswordAuthe]]></description><category></category></item><item><title><![CDATA[一、Spring Security核心原理及Demo演示]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108398767</link><guid>https://blog.csdn.net/STIll_ly/article/details/108398767</guid><author>STIll_ly</author><pubDate>Fri, 04 Sep 2020 14:31:44 +0800</pubDate><description><![CDATA[一、Spring Security 简介
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是一套保护基于spring开发的应用程序的事实标准。Spring Security是一个重点为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样，Spring Security的真正强大之处在于它可以很容易地扩展以满足定制需求。
二、Spring Security 核心功能

身份认证-用户登录；
访问授权-权限控制；
攻击防护-防止伪造身份；

三、Spring ]]></description><category></category></item><item><title><![CDATA[资源管理系统-基于角色的权限控制（role-based access control）]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108376245</link><guid>https://blog.csdn.net/STIll_ly/article/details/108376245</guid><author>STIll_ly</author><pubDate>Thu, 03 Sep 2020 11:58:54 +0800</pubDate><description><![CDATA[一、RBAC简介
RBAC(role-based access control)，基于角色的权限控制系统，是指对于不同角色的用户，拥有不同的权限 。用户绑定角色，角色绑定权限，形成用户-角色-权限的关系，如下图所示。
用户角色权限关系图：

二、技术框架选择
前端：Vue、Vue-router、Axios、Js-cookie
后端：SpringBoot、SpringSecurity、MyBatis、MyBatisGenerator、PageHelper、Redis、JWT
三、用户登录及权限控制流程说明
1]]></description><category></category></item><item><title><![CDATA[资源管理系统-CKPLayer去除播放窗口水印]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108347854</link><guid>https://blog.csdn.net/STIll_ly/article/details/108347854</guid><author>STIll_ly</author><pubDate>Tue, 01 Sep 2020 18:10:08 +0800</pubDate><description><![CDATA[播放视频时有右上角的水印，去掉后观影效果会不会好呢，我们一起来试一下，
前后对比效果：


去掉后是不是变舒服了呢？
看下怎么实现的：
在ckplayer.js中搜索logo，能明显看到一句话：显示在右上角的logo图片，如果不需要可以删除该属性，果断注释掉

然后在ckplayer.xml中搜索logo,把这部分也注释掉

大功告成啦！

...]]></description><category></category></item><item><title><![CDATA[资源管理系统-VUE使用ckplayer实现视频列表播放]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108342856</link><guid>https://blog.csdn.net/STIll_ly/article/details/108342856</guid><author>STIll_ly</author><pubDate>Tue, 01 Sep 2020 15:33:56 +0800</pubDate><description><![CDATA[1、  下载ckplayer插件
官网地址：http://www.ckplayer.com/down/

2、加压后将ckplayer放进VUE项目的static目录下：

3、创建VUE组件
&lt;template&gt;
  &lt;div id="video"&gt;&lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;
  export default {
    name: 'ckplayer',
    props: ['videoUrls','autoP]]></description><category></category></item><item><title><![CDATA[Git 如何删除远程服务器文件同时保留本地文件]]></title><link>https://blog.csdn.net/STIll_ly/article/details/108075392</link><guid>https://blog.csdn.net/STIll_ly/article/details/108075392</guid><author>STIll_ly</author><pubDate>Tue, 18 Aug 2020 13:48:31 +0800</pubDate><description><![CDATA[Git 如何删除远程服务器文件同时保留本地文件Git 如何删除远程服务器文件同时保留本地文件
Git 如何删除远程服务器文件同时保留本地文件
在上传工程到git上时，有时候会把本地自动生成的以及设计隐私的账户信息传到服务器上，这时你先删除本地，再同步服务器，显然是不合理的。git提供了一个好的解决方法，可以直接删除服务器文件，同时不影响本地文件，比如已经提交了配置文件application-pro.yml文件到远程仓库，现在我们要把它删除掉，命令如下：
git rm --cached -r *pro.yml]]></description><category></category></item><item><title><![CDATA[Rabbitmq实现多系统间的分布式事务，保证数据一致性]]></title><link>https://blog.csdn.net/STIll_ly/article/details/104115596</link><guid>https://blog.csdn.net/STIll_ly/article/details/104115596</guid><author>STIll_ly</author><pubDate>Thu, 30 Jan 2020 23:51:47 +0800</pubDate><description><![CDATA[Rabbitmq实现多系统间的分布式事务，保证数据一致性一、实验环境二、实验目的三、实验方案四、实验步骤1、消息队列2、数据库准备2.1订单表2.2 消息发送状态表2.3 运单表3、订单中心3.1 订单中心分析3.2 编写代码3.2.1 Springboot整合rabbitmq和mysql数据库3.2.1.1依赖如下：3.2.1.2配置文件内容：3.2.2 订单中心代码3.3 订单中心测试3.3....]]></description><category></category></item><item><title><![CDATA[SpringBoot整合mybatis查询数据库结果中的字段为null时不返回问题解决方法]]></title><link>https://blog.csdn.net/STIll_ly/article/details/103993486</link><guid>https://blog.csdn.net/STIll_ly/article/details/103993486</guid><author>STIll_ly</author><pubDate>Wed, 15 Jan 2020 17:42:02 +0800</pubDate><description><![CDATA[多数据源情况
对于多数据源的情况，需要在SqlSessionFactory bean中增加一段代码：
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setCallSettersOnNulls(tr...]]></description><category></category></item><item><title><![CDATA[Springboot+Mybatis+Druid多数据源配置]]></title><link>https://blog.csdn.net/STIll_ly/article/details/103668986</link><guid>https://blog.csdn.net/STIll_ly/article/details/103668986</guid><author>STIll_ly</author><pubDate>Mon, 23 Dec 2019 18:06:12 +0800</pubDate><description><![CDATA[1. 新建Springboot项目


根据实际填写

依赖根据实际需要自行选择（此处可不选，接下载可以自己在pom文件中添加）：

选择项目路径，然后点击完成

配置项目结构：


将配置文件该成yml后缀名，看个人习惯，可不改呦

新建controller,mapper等目录，结构如下：

启动成功

2. 配置多数据源
添加Druid依赖：
		&lt;!-- Druid连接池 --&gt;...]]></description><category></category></item><item><title><![CDATA[Win10安装mysql-5.7.28解压缩版（手动配置）方法]]></title><link>https://blog.csdn.net/STIll_ly/article/details/103663899</link><guid>https://blog.csdn.net/STIll_ly/article/details/103663899</guid><author>STIll_ly</author><pubDate>Mon, 23 Dec 2019 14:09:08 +0800</pubDate><description><![CDATA[下载压缩包
官网下载地址：https://dev.mysql.com/downloads/mysql/
安装

解压缩到指定文件夹下
我的存放目录D:\app\mysql-5.7.28-winx64
在D:\app\mysql-5.7.28-winx64目录下创建data文件夹和my.ini文件
my.ini文件写入内容：

[mysqld]

port = 3306

basedir=D:\ap...]]></description><category></category></item><item><title><![CDATA[Linux开通防火墙80端口]]></title><link>https://blog.csdn.net/STIll_ly/article/details/103629914</link><guid>https://blog.csdn.net/STIll_ly/article/details/103629914</guid><author>STIll_ly</author><pubDate>Fri, 20 Dec 2019 11:36:44 +0800</pubDate><description><![CDATA[查看已开通端口列表
[admin@localhost yum.repos.d]$ sudo firewall-cmd --list-port

查看所有信息列表
[admin@localhost yum.repos.d]$ sudo firewall-cmd --list-all;

开通80端口命令
[admin@localhost yum.repos.d]$ sudo firewall-cmd...]]></description><category></category></item><item><title><![CDATA[Linux Centos7下通过yum源安装Nginx]]></title><link>https://blog.csdn.net/STIll_ly/article/details/103629501</link><guid>https://blog.csdn.net/STIll_ly/article/details/103629501</guid><author>STIll_ly</author><pubDate>Fri, 20 Dec 2019 11:30:10 +0800</pubDate><description><![CDATA[环境准备
Linux发行版本：Centos7
增加nginx yum源

进入到yum源配置目录，创建文件nginx.repo，增加yum源信息

[admin@localhost yum.repos.d]$ cd /etc/yum.repos.d
[admin@localhost yum.repos.d]$ vim nginx.repo
[admin@localhost yum.repos.d]...]]></description><category></category></item></channel></rss>