-
Spring Security 实战干货:AuthenticationManager的初始化细节
1. 前言 今天有个同学告诉我,在Security Learning项目的day11分支中出现了一个问题,验证码登录和其它登录不兼容了,出现了No Provider异常。还有这事?我赶紧跑了一遍还真是,看来我大意了,不过最终找到了原因,问题就出在AuthenticationManager的初始化上。自定义了一个UseDetailService和AuthenticationProvider之后AuthenticationManager的默认初始化出问题了。 虽然在Spring Security 实战干货:图解认证管理器AuthenticationManager一文中对AuthenticationManager的流程进行了分
-
一起进阶一起拿高工资!Java开发进阶-log4j2日志脱敏原理分析
大家好,我是tin,这是我的第5篇原创文章 本文讲述在考虑对业务系统代码入侵最小的情况下实现日志脱敏的方案原理。文章很长,包括了日志脱敏起由、编码实现、log4j2.xml文件加载原理、log4j2的插件机制等,最后还抖出注解编译处理器AbstractProcessor,实现编译期动态生成代码!有点像捡到宝,毕竟以前没关注过注解编译处理器,先上一个目录: 一、为什么做日志脱敏 二、log4j2日志脱敏编码实现 三、源码探索log4j2日志脱敏实现原理 1、什么是slf4j? 2、log4j2又是什么? 3、slf4j和log4
-
为什么前端精通Node.js的人这么少?
针对 @萧强 的答案,有所 反对 / 质疑 / 赞同 。为什么前端精通 Node.js 的人这么少?这不是理所当然的事情么。为什么前端精通 Java 的人这么少?为什么前端精通 PHP 的人这么少?为什么前端精通 Python 的人这么少?为什么前端精通 Ruby 的人这么少?为什么前端精通 Go 的人这么少?这不都是理所当然的事情么。(一般情况下,名称叫 Node ;只有语境有所混淆的情况下,才叫 Node.js 以和 node/“节点” 区别。这和 Go 一样,一般叫 Go ,有表达不清楚的情况,才叫 Golang 以和 go/“去吧” 区别。以下文中均称 Node .)反对 “1. Node 比较新”:就因为它比较新就精通的人少吗?它在 09 年发布,同年诞生的还有 AngularJS ;AngularJS 也比较新啊,为什么同样“比较新”而前端精通 Node 的人少、前端精通 AngularJS 的人多呢?质疑 “2.更新比较频繁”:更新频繁就精通的人少吗?同期诞生的 AngularJS
-
初学者学习JS很吃力怎么办?到底该如何学习JS?
我尝试着来回答这个问题,因为自己也有这方面的经历和困惑。由于自己是CSSer出身,一直以来只对CSS方面的话题感兴趣,而且也一直没有停过对CSS的探究。而对于JavaScript来说,早在很多年前都想学,但一直没有动力或者说没有兴趣。兴趣才是学习的一种最佳动力记得在2013年开始我就常抱着JavaScript高级程序设计这本红皮书,可是每次抱起来就没多久被放下,重心又回到了CSS上。主要原因有两点:没有压迫感:从事的工作主要是以CSS为主,对于JavaScript几乎没有触达,这也应了那么一句,没有压力就没有动力没有兴趣:对JavaScript只是想学,而且知道学了对自己的好处,但始终没有提起兴趣,所以就没有动力去坚持学习后来随着技术的革新,时代的变更,发现不懂JavaScript对自己的发展和学习都有很大的限制。比如说,我学习CSS的时候,需要写一些测试案例,如果不具备JavaScript的能力,写测试案例非常的费用,如果你写教程的话,对读者也没有一个更形象的展示。再加上,进入了一个新团队,业务上基本离不
-
Dart入门宝典第三章——面向对象编程之类的介绍
类与对象 使用关键字class声明一个类 class Person{ } 使用关键字new创建一个对象,new可省略 void main() { var p1 = new Person(); var p2 = Person(); } 所有对象都继承于Object类 属性与方法 属性默认会生成getter和setter方法 void main() { var p = new Person(); p.name = "黄家驹"; p.age = 31; print("name = ${p.name}, age = ${p.age}"); } class Person{ String name; int age; } 打印结果: name = 黄家驹, age = 31 可
-
Dart入门宝典第二章——赋值运算符、控制语句、方法和闭包的相关介绍
赋值运算符 = 普通赋值 ??= 当变量值为null的时候才赋值 void main() { var a = 10; var b; b ??= 5; print(b); var c = 20; c ??= 5; print(c); } 打印结果为: 5 20 上面代码中,b一开始并没有赋值,为null,此时使用??=赋值会生效,所以打印b的值为5;c由于已经赋值了,不为null,故??=不生效,c的值还是20。 条件表达式 三目运算符:condition ? expr1 : expr2 ??运算符: expr1 ?? expr2 当expr1为null的时候,就会使用expr2 void main() { in
-
Dart入门宝典第一章——变量常量声明和数据类型介绍
前言   其实在2019年初的时候已经看过Dart的入门教学视频,那时候刚开始学flutter,需要先学Datr语言,由于在公司一直做的都是原生开发,并没有真正使用flutter开发,最近打算走混合开发的路线,所以现在重拾Dart基础,很感谢雷宇老师的视频教程,这里将看视频后的笔记整理和归纳,以便日后的复习,也希望可以帮助到想要入门Dart语言的小伙伴。 变量 Dart中使用 var 声明变量, 可赋予不同类型的值 未初始化时,默认值为null 使用final声明一个只能赋值一次的变量 void main
-
开发中的你的Git提交规范吗?
1. 前言 目前大部分公司都在使用Git作为版本控制,每个程序员每天都要进行代码的提交。很多开发者也包括我自己,有时候赶时间或者图省事,就这么提交: git commit -m "修改bug,优化代码" 过了一段,突然去查找一个具体的提交你会发现不是特别好找。因此我们需要规范我们的代码提交来避免这种情况。同时良好的提交规范也有助于我们生成清晰的ChangeLog,更利于同事之间的协作。 > 如果你想成为知名开源项目的贡献者更要规范自己的代码提交。 2. Git提交规范 目前业内做的比较好的,