- 博客(79)
- 资源 (2)
- 收藏
- 关注
原创 2021-01-12
Spring-Security源码解读: 1.使用ctrl+shift+n组合键查找UsernamePasswordAuthenticationFilter过滤器,该过滤器是用来处理用户认证逻辑的,进入后如图: (1)可以看到它默认的登录请求url是"/login",并且只允许POST方式的请求 (2)obtainUsername()方法点进去发现它默认是根据参数名为"username"和"password"来获取用户名和密码的 (3)通过构造方法实例化一个Us...
2021-01-12 08:54:04
456
原创 Spring Boot启动原理解析(注解篇)
SpringBoot内置的自动配置使开发变得很方便,所以这次就来看看它的启动源码和它的自动化配置的实现原理。 启动类:@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }} 可以看到这个启动类中有两部分:@.
2021-01-11 01:42:20
418
原创 SpringSecurity启动流程源码解析
前面两期我讲了SpringSecurity认证流程和SpringSecurity鉴权流程,今天是第三期,是SpringSecurity的收尾工作,讲SpringSecurity的启动流程。就像很多电影拍火了之后其续作往往是前作的前期故事一样,我这个第三期要讲的SpringSecurity启动流程也是不择不扣的"前期故事",它能帮助你真正认清SpringSecurity的整体全貌。在之前的文章里,在说到SpringSecurity中的过滤器链的时候,往往是把它作为一个概念了解的,就是我们只是知道有这么
2021-01-11 00:48:29
373
原创 spring security启动流程解析
spring security启动流程解析(一)SecurityAutoConfiguration在springboot体系下我们一般是找 xxxAutoConfiguration,那么这里我们可以通过查找securityAutoConfiguration可以找到如下类:SecurityAutoConfiguration SecurityFilterAutoConfiguration SecurityRequestMatcherProviderAutoConfiguration Managem
2021-01-10 22:41:58
429
原创 spring security配置构建分析
先看一张大图从官网给的图中我们可以知道启动是通过封装一个FilterChainProxy 到servlet的filter体系中,来完成安全配置的全套操作。记住这个点,先放着,接着我们来了解spring security 配置模块中几个顶层接口org.springframework.security.config.annotation.SecurityBuilder org.springframework.security.config.annotation.SecurityConfigurer o
2021-01-10 22:38:30
631
原创 Spring Security 原理讲解
一、整理了解下Spring Security 的工作原理 如上图所示,spring security 的主要工作就是在原有的网络请求的过滤器链(ApplicationFilterChain)中额外添加一条过滤器链(FilterChainProxy),主要用于用户认证与授权。 请求进入web容器经一些容器自身的基础加工后,进入到servlet的滤器链中,spring security 使用DelegatingFilterProxy这个filter,将targetBea...
2021-01-10 22:36:32
838
原创 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)
doCreateBean方法上文【Spring源码分析】非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的。先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object
2020-12-12 10:28:40
170
原创 【Spring源码分析】非懒加载的单例Bean初始化过程(上篇)
代码入口上文【Spring源码分析】Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finishBeanFactoryInitialization方法完成了对于所有非懒加载的Bean的初始化。finishBeanFactoryInitialization方法中调用了DefaultListableBeanFactory的preInstantiateSingletons方法,本文针对preIn
2020-12-12 10:27:03
263
原创 【Spring源码分析】Bean加载流程概览
代码入口之前写文章都会啰啰嗦嗦一大堆再开始,进入【Spring源码分析】这个板块就直接切入正题了。很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口。下面有很简单的一段代码可以作为Spring代码加载的入口: 1 ApplicationContext ac = new Clas
2020-12-12 10:24:43
189
原创 浅谈JAVA中的final修饰符
final修饰符是JAVA中比较简单的一个修饰符,很多人通过书本就可以熟练掌握,但我学的时候,虽然感觉会用了,但是并不是十分理解这个修饰符,所以我找了相关资料,把我的个人理解分享给大家~~final书本定义:1.final可以修饰变量,被final修饰的变量被赋初值后,不能对它重新赋值2.final可以修饰变量,被final修饰的方法被重写3.final可以修饰类,被final修饰的类不能派生子类总的来说,就是值不能改,方法不能重写,类不能继承,就相当于是终结版。。。。一..
2020-12-12 06:15:39
321
转载 Java基础之—反射(非常重要)
反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
2020-12-12 05:53:14
314
原创 spring框架学习 依赖注入
spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。接口注入不作要求,下面介绍前两种方式。1,set注入 采用属性的set方法进行初始化,就成为set注入。 1)给普通字符类型赋值。 public class User{ privateString username; publicString getUsername() { returnusername; } public...
2020-12-12 02:28:59
242
原创 Spring注入:配置注入(set注入和构造器注入)与注解注入
注入简介Spring注入可以理解为是对一个对象进行初始化,也就是省去new的这个步骤,类似于工厂模式一样,通过一个工厂制造出这个对象,如果遇到修改,只需要改一处就行了。实现spring注入一般有两种方法,配置文件,或者用注解。各有不同的作用。注意:本文中涉及到所以例子均默认加入了spring的包,如果没有加入spring包可以自己百度一下用maven或者手动下载spring的依赖包(这里就不给博客了,还是应该自己动动手吧)配置注入:不重复造轮子,这里已经说明得很清楚了,介绍了两种方式,.
2020-12-12 02:25:53
2468
原创 构造方法注入
Spring中只有两大核心技术:IOC&DI(控制反转&依赖注入),AOP(面向切面编程)什么是依赖注入?利用配置文件的关系来决定类之间的引用关系以及数据的设置操作.1.构造方法注入默认情况下如果在applicationContext.xml文件之中配置的程序都可以自动的找到Spring容器加载时进行对象的实例化操作.但是自动进行初始化的时候调用1是类中的无惨构造方法,而且通过反射机制应该知道.如果类中提供有无惨构造方法一定要比有参构造方法的实例化更加容易....
2020-12-12 02:24:18
792
1
原创 Spring set注入和构造注入的区别
Spring种提供了2种常用的注入方式,set方法注入和构造函数注入。由于这2种注入方式很相似,都可以满足我们的需求,所以在大多数情况下我们忽视了这2种注入方式的区别。下面让我们看看这2种注入方式的特点。我们先看看Spring在使用set方法注入时,是怎样实例化一个Bean和Bean的合作者的:在A中有一个setB方法用来接收B对象的实例。那么Spring实例化A对象的过程如下:在不考虑Bean的初始化方法和一些Spring回调的情况下,Spring首先去调用A对象的构造函数实例化A,然后查找A依赖的
2020-12-12 02:03:37
1118
原创 一个字符占几个字节
ASCII码: 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。UTF-8编码: 一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。Unicode编码: 一个英文等于两个字节,一个中文(含繁体)等于两个字节。 符号: 英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占
2020-12-10 00:56:32
4301
原创 golang 之 Println call has possible formatting directive
比如这么写:fmt.Println("Hello, playground %d",i)那么会出现warning:Println call has possible formatting directive %d Go vet exited.fmt.Printlndoesn't do formatting things like%d. Instead, it uses the default format of its arguments, and adds spaces betwee...
2020-12-10 00:55:38
4852
原创 Go 语言中 = 和 := 有什么区别
= 是赋值, := 是声明变量并赋值。// = 使用必须使用先var声明例如:var aa=100//或var b = 100//或var c int = 100// := 是声明并赋值,并且系统自动推断类型,不需要var关键字d := 100
2020-12-10 00:30:13
252
转载 使用LVS实现负载均衡原理及安装配置详解
负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。此文章已经过期!请移步新文章,更详细、更全面、更准确负载均衡 LVS 入门教程详解 - 基本介绍 负载均衡 LVS 入门教程详解 - 基础原理 负载均衡 LVS 入门教程详解 - 操作实践一、负载均衡LVS基本介绍 LB集群的架构和...
2020-12-09 06:35:38
216
转载 为什么大公司一定要使用DevOps?
0 DevOps的意图究竟什么是DevOps? 要想回答这个问题,首先要明确DevOps这个过程参与的人员是谁?即开发团队和IT运维团队!那么,DevOps的意图是什么呢?即在两个团队之间,建立良好的沟通和协作,更快更可靠的创建高质量软件!事实上,并不是这两个团队之间的协作帮助交付了更好的软件,而是“开发”和“运维”团队之间的统一导致了软件的改进,并以更快的速度交付。我们不要忘记DevOps工具在实现自动化方面所扮演的角色。开发和运维“一体”的感觉是由开发人员和操作工程师之间的...
2020-12-09 05:38:24
2653
转载 如何实现一个连接池?一文带你深入浅出,彻底搞懂
- 前言 -【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。今天我们通过【2w1h】方式来讨论“连接池”:什么是连接池(what)?为什么需要连接池(why)?怎样做一个连接池(how)?- 什么是连接池? -深入思考连接池的本质,但不要思考的过于复杂!“池”是一种非常形象化的描述,它是一种容器,做储存之用;在编程中我们往往使用数组、链表、队列、map来表达。“连...
2020-12-09 05:35:01
897
转载 keepalived配置虚拟ip(vip)实现双机热备以及自动切换主备
首先准备两台服务器,我这里的两台服务器的ip分别是192.168.129.128和192.168.129.1291.安装keepalived(两台都要装):yum install keepalived2.修改配置文件,删除掉/etc/keepalived/keepalived.conf,然后重新创建一个/etc/keepalived/keepalived.conf:vi/etc/keepalived/keepalived.conf128这台服务器的内容如下:vrrp_script .
2020-12-09 05:09:59
1256
转载 环境变量的作用,为什么要设置环境变量?
我们平时打开一个应用程序,一般是双击桌面图标或在开始菜单链接,无论是桌面的快捷图标还是菜单链接都包含了应用程序的安装位置信息,打开它们的时候系统会按照这些位置信息找到安装目录然后启动程序,比如如QQ:知道了一个应用程序的安装目录位置,我们也可以通过命令行工具打开,如笔者QQ的位置为:“C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin\QQProtect.exe”,QQ的应用程序名为为QQProtect.exe,那么我们打开命令行工具Win+...
2020-12-07 00:19:02
419
转载 SpringMVC拦截器(资源和权限管理)
1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet。 DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。 所以我们现在w
2016-07-22 12:06:39
175
转载 理解java多态的概念和作用
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。 对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对
2014-05-19 11:51:35
977
转载 ORACLE重建索引需要考虑问题
一:考虑重建索引的场合1:表上频繁发生update,delete操作2:表上发生了alter table ..move操作(move操作导致了rowid变化)二:判断重建索引的标准 索引重建是否有必要,一般看索引是否倾斜的严重,是否浪费了空间; 那应该如何才可以判断索引是否倾斜的严重,是否浪费了空间,如下:1, 对索引进行结构分析Analyze ind
2014-02-20 11:22:28
1329
原创 UEFI win7安装U盘的制作方式
UEFI是一种新的接口标准,主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的PC BIOS的继任者。而对应UEFI,硬盘就要改为gpt的模式,否则将无法识别启动系统。gpt 可以简单地认为是一种新的分区管理模式, 就如现在一般使用的 MBR。 以下是一些,帮人在UEFI方式上安装win7 得到的经
2014-02-13 10:14:50
1923
转载 从jdbc查询的结果集中的数据放入到String数组中
------解决方案--------------------------------------------------------public List query(String sql) {Vector content = new Vector();Connection conn = null;Statement stmt = null;try {logger.debu
2012-09-22 22:14:37
2339
转载 Map.Entry 类使用简介
你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用Map.Entry类,你可以得到在同一时间得到所有的信息。标准的Map访问方法如下:Set keys = map.keySet( );if(keys != null) {Iterator iterator = keys.iterator( );while(iterator.hasNext( )) {Object key
2012-09-11 16:28:59
506
转载 Java Swing事件驱动实例详解
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI)。可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境(IDE)方便的在现成的界面窗口上拖放各类组件(Compo
2012-09-09 08:57:36
1287
转载 如何将System.out的内容重定向输出到一个界面上的文本框中
import javax.swing.JFrame;import javax.swing.JTextArea;import java.io.PrintStream;class StreamToTextArea extends JFrame { //declare PrintStream and JTextArea private static PrintStream p
2012-09-06 17:46:34
3316
转载 纯Java实现的多路归并快速排序算法
package wjw.PreTrans;import java.io.*;import java.util.*;import org.apache.commons.io.*;public class MergeSort { private static FastQSortAlgorithm QQ = new FastQSortAlgorithm();
2012-08-29 21:04:55
748
转载 java.util.logging.Logger使用详解
java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着,其实在一些测试性的代码中,jdk自带的logger比log4j更方便。 一、创建Logger对象 static Logger getLogger(String name) 为指定子系统查找或创建一个 logg
2012-08-20 20:34:06
466
转载 log4j详解与实战
log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。 首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:http://logging.apache.org/log4j/1.2/download.html 我们先看一个最简单的示例:【示例1】项目结构:【注:由于这里的多个项目公用
2012-08-20 20:00:29
630
转载 java.util.logging 记录日志
代码不难理解,直接上例子:package log;import java.io.IOException;import java.util.logging.FileHandler;import java.util.logging.Level;import java.util.logging.Logger;public class LogWriter {
2012-08-18 01:44:15
700
转载 JAVA log4j记录日志
log4j,是一个java封装了日志函数的jar包。官方文档:http://logging.apache.org/log4j/1.2/manual.html从网上down一个 http://ishare.iask.sina.com.cn/f/12460553.html?from=like 。 如何使用 log4j.jar:1、将log4j.jar导入到项目中。w
2012-08-18 01:43:32
685
转载 java读取配置文件
一般来说,首页的内容比较多,但内容大多也有重复的地方,比如说某几块内容都是文章,只是文章类别不同,或者说某几块都是商品,只是商品的分类不同,那么我们在后台取数据时,都需要根据类别ID来取值的。通常的做法都是写死ID,但写死又分为三种情况: 1、前台写死ID,通过,可以进行动态的包含内容。 2、可在service层写一个id的数组,String[] ids = {“”,"
2012-08-17 03:17:57
677
转载 Oracle之Char,VarChar&VarChar2的比较
之前我们讨论过MySQL数据库中char与varchar之争,知道了在什么情况下使用Char字符型数据,什么情况下采用Varchar字符型数据。这次引进VarChar2一起来讨论,对这三者进行比较,只不过这次的数据库由MySQL变成了Oracle。在Oracle数据库中,字符类型有Char、VarChar和VarChar2三种类型,但不大清楚各自区别在哪儿,平时基本上就是用VarChar,
2012-08-13 10:08:01
660
原创 java递归函数
递归函数的定义:答:递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。2、递归方式:递归调用有直接递归和间接递归两种方式。public class Recursion {public int getRecursion(int i){if(i == 1){return 1;}else{return i +
2012-07-24 15:58:11
790
转载 Java hashCode
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可
2012-07-17 11:14:49
373
c 变量中含有\0怎么完整输出
2020-12-01
为什么我用的memcpy 不忽略\0
2020-12-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人