自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (4)
  • 收藏
  • 关注

原创 史上最简单的Spring Security教程:终极篇,注意,这不是终点,不是最后一篇!!!

说起来Web应用安全,通用的方案无非 Spring Security 和 Apache Shiro。这两者我们在此不做比较,用Spring Security多,无非是因为 Spring 框架的“裙带关系”,当然了,也有一些其它原因,如CAS集成、OAuth2集成等等,都有比较成熟的集成框架方案。Spring Security框架,说实话,比较复杂,好多人一开始不太理解,只会照搬网上的答案,遇到问题解决不了。这是非常不好的习惯,技术方案一定是自己能解决的,或者说比较容易找到解决方案的,不然生产环境出问题、

2020-07-23 15:46:28 4607 3

原创 史上最详细的WordPress安装教程:终极篇

WordPress是一款能建立出色网站、博客或应用的开源软件。其设计美观、功能强大,同时开源免费。35%的网站都在使用WordPress,小到兴趣博客,大到新闻网站(官网数据)。有了WordPress就有了无限可能。 可自定义设计 友好的SEO 响应式移动网站支持 高性能 随时随地管理 高安全性 强大的媒体管理 简单且无障碍 利用超过55,000个插件帮助您扩展WordPress,让网站满足需求。也可以增加一个.

2020-07-20 16:34:38 4833 2

原创 可能是最全的Thymeleaf参考手册:终极篇,全,全,全!!!

Thymeleaf是一个现代的、服务器端的Java模板引擎,适用于Web和独立环境。其主要目标是为开发工作流程带来异常优雅的自然模板——可以再浏览器中正确显示HTML,也可以作为静态原型,使开发团队协作更通畅。目前Thymeleaf已于Spring Framework集成,相信凭借Spring Framework的出色特性,能使Thymeleaf成为现代HTML5 JVM Web开发的首选。Thymeleaf全部的参考手册如下:可能是最全的Thymeleaf参考手册(一):配置 可能是最全的T

2020-06-11 17:05:13 1424

原创 重温Java基础(终章):汇总篇

从事Java开发工作已近十年,从最初的懵懵懂懂,到现在的“不知所措”。随着知道的越多,不知道的也越多。但不管技术怎么发展,始终离不开基础知识。所以,近段时间开始,将重温Java技术的基础知识,主版本为Java8,中间可能也会穿插一些其它版本,如Java7。谨以此系列文章,来记录重温Java基础的历程。为啥费劲写这些文章?和写SpringCloud进阶之路时一样,一是为了巩固自己所学的知识,写下...

2020-03-11 15:41:36 364

原创 Spring Cloud进阶之路:汇总篇

截止到2020年春节前,总算是把Spring Cloud微服务架构落地应用第一阶段写完了。十几篇文章,查找起来也不太好找,于是,也是时候写一个汇总文章文章了,提供统一入口,方便查找与阅读。在此系列开篇便已提过,当前系列以Spring Boot 2.1.7.RELEASE,Spring Cloud Greenwich.SR2,Spring CloudAlibaba 2.1.0.RELEASE为框架基础,后续均以此为版本参照。也可能在本系列大致完结之后,出以Spring Cloud Finchley、Sp

2020-01-20 09:33:37 1360

原创 避坑指南(三):Spring Security Oauth2框架如何初始化AuthenticationManager

说明顾名思义,即为“身份认证管理器”, 说白了,就是各种类型登录方式、或者Authentication(*AuthenticationToken)辅助认证Provider的管理对象。比如,如果只是采用表单登录认证,那么完全可以使用默认的AuthenticationManager,认证用户势必要提供UserDetailsService、PasswordEncoder,如此一来,系统会根...

2020-01-13 19:34:12 7886

原创 SpringBoot + Quartz分布式集群定时任务框架实践

在日常开发汇总,经常会遇到需要定时任务的场景,简单的,可以使用Spring的定时任务调度框架,也可以使用Quartz。无论使用哪种,都需要解决一个问题,那就是集群问题。一般情况下,定时任务能且仅能运行于一台应用实例上。

2019-12-16 09:04:25 620

原创 SpringBoot配置文件中List类型配置@Conditional自定义实现

系统启动,如果配置文件中没有redis-client.clients配置,或者其配置项不存在,则不会初始化RedisClientConfiguration。然而,当我们遇到要根据配置文件中一项List类型的配置是否配置的时候,确傻眼了,@OnPropertyCondition不支持。无论如何调试都不行。那配置文件解析时,需要根据是否存在redis-client.clients配置,且存在至少1个配置项时,可以执行逻辑。如根据配置文件中是否配置了redis,来决定是否初始化RedisConfig。

2023-10-24 17:53:58 241

原创 面试宝典(三):如何使用两个线程实现服务提供和服务消费

本次我们来讲一个多线程常见的面试题:如何用两个线程,实现服务提供和服务消费,即一个线程用作服务提供,一个线程用作服务消费?

2022-10-24 10:46:24 547 1

原创 日常开发技巧(一):延迟删除文件

但是,在打印Hello World 1的执行线程中,会随机报错,如果随机数等于3,则抛出异常。但是,如果遇到特殊情况,如文件需要传输、上传到别的平台/系统,完成后尚需校验原始文件和接收文件的MD5以确定完整性。如果文章对您有帮助,请举起您的小手,轻轻【三连】,这将是笔者持续创作的动力源泉。不过,如果只是单次执行某次任务,每次执行完毕后再取消Timer定时器,也是可以的,还是得具体情况具体分析,毕竟适合自己的才是最好的。我是银河架构师,十年饮冰,难凉热血,愿历尽千帆,归来仍是少年!因此,需要延迟删除文件。

2022-09-26 15:47:38 846

原创 多线程编程(二):List组装

因此,不会出现丢失/覆盖数据的情况。比如,拟定一个场景,给定0-9999,共10000个数字,组装2个列表:奇数列表、偶数列表,分别存储到2个列表中。但是,如果有天,业务量激增,单线程已经满足不了需求了,必须使用多线程提升处理速度,那么多线程该怎么处理呢?在日常工作中,难免遇到在循环体中组装List的场景,一般来说,不考虑多线程的话,实现起来非常简单。但是,运行结果却不尽如人意,奇数和偶数列表,并不一定是5000,飘忽不定。运行这段代码,得出的结果也必然是,奇数列表5000个,偶数列表5000个。...

2022-08-31 16:02:29 471

原创 多线程编程(一):加减计算

每次执行完之后,都会将计数器减1(countDownLatch.countDown()),在未执行完之前,处于等待状态(countDownLatch.await())。这是因为多线程运行时为并发方式,也许线程尚未执行时,便输出了count的值,此时为初始值0。此时,就需要引入一个新的类,AtomicInteger,可以以原子方式更新int值。感谢您的阅读,我是银河架构师,十年饮冰,难凉热血,愿历尽千帆,归来仍是少年!运行一下,结果与预期一致,count在经过3次加1之后,最终结果为3。运行一下,结果为0。.

2022-07-21 15:00:48 740

原创 史上最简单的Spring Security教程(四十二):重点,也是终点,SpringSecurity工作流程图解

​不知不觉间,Spring Security系列从2020年6月16日于史上最简单的Spring Security教程(一):一分钟搭建SpringSecurity开始,历时5月有余。期间断断续续的一直在写,这一段太忙,没有太多的时间,所以就一直搁置了。不过,趁着琐碎的时间间隙,也思考了下这个系列的终结篇写什么内容。既然是终结篇,那就总结一下 Spring Security 框架的工作流程,算是为此系列暂时画上一个句号。其实,Spring Security 框架最厉害、最核心的,就是过滤器链...

2020-11-25 14:56:26 2678 5

原创 史上最简单的Spring Security教程(四十一):SecurityContextHolder及SecurityContextHolderStrategy详解

如何静态的、较为方便的获取当前系统已登录的用户的信息?这恐怕就要靠 Spring Security 框架的另外一个“著名”的组件类SecurityContextHolder了。/** * Associates a given {@link SecurityContext} with the current execution thread. */SecurityContextHolder类最核心的作用,便是将当前给定的 SecurityContext 与 当前执行线程绑定,从而方便...

2020-11-25 14:53:54 6030 3

原创 史上最简单的Spring Security教程(四十):SecurityContextPersistenceFilter详解

SecurityContextPersistenceFilter,为Spring Security框架Filter Chain过滤器链的第一个 Filter,具有不可或缺的作用。/** * Populates the {@link SecurityContextHolder} with information obtained from the * configured {@link SecurityContextRepository} prior to the request an...

2020-11-11 10:36:17 2286

原创 史上最简单的Spring Security教程(三十九):ExceptionTranslationFilter自动化配置及其简介

前面我们讲了Spring Security框架中承载着承上启下的作用的 Filter:ExceptionTranslationFilter。其中,当后续 Filter 发生 AuthenticationException 异常,或者是 AccessDeniedException 异常且此时为未登录状态或者是记住我状态,则调用 AuthenticationEntryPoint 来处理。一般情况下,如无特殊需求,我们不会对 Spring Security 的异常处理做什么配置,那么系统又是如何自动...

2020-10-31 09:40:00 1327 1

原创 史上最简单的Spring Security教程(三十八):ExceptionTranslationFilter详解

这是Spring Security框架FilterChain中倒数第二个 Filter,承载着承上启下的作用。还记得 FilterSecurityInterceptor 吗?史上最简单的Spring Security教程(十六):FilterSecurityInterceptor详解。如当用户未登录时抛出的 AccessDeniedException 异常、或者其它 AuthenticationException 异常。此时,系统会跳转到固定的页面,如 403 页面、或者执行其它操作。...

2020-10-24 09:20:27 1247 1

原创 史上最简单的Spring Security教程(三十七):RememberMe记住我原理剖析

​用户登录中常用的RememberMe-记住我功能,通俗来讲,即用户成功登录一次以后,系统自动记住该用户一段时间(可配置,Spring Security 框架默认为两周)。而在此时间段内,用户不必重新登录即可访问系统资源。本文即对Spring Security框架提供的RememberMe-记住我实现逻辑进行详细讲解,剖析其实现过程。用户登录首先,在用户登录时,如果用户勾选了 记住我 选项,则系统会将该用户的一些信息进行处理,以便下次不必登录即可访问系统。在第一次登录时,请求会由 Us...

2020-10-20 19:06:56 1506

原创 史上最简单的Spring Security教程(三十六):RememberMeAuthenticationFilter详解

前面我们讲了记住我登录方式,以及和其它登录方式相融合的多种登录形式,想必对记住我登录方式有了一个大致清晰的了解。本次我们就来说一下其中一个比较重要的Filter,即RememberMeAuthenticationFilter。RememberMeAuthenticationFilter是记住我登录方式比较重要的类,其主要功能有自动登录、身份认证、登录成功、事件发布、异常处理/登录失败等。另外,重要的一点是,该 Filter 执行有一个条件,就是当前用户尚未认证。if...

2020-10-19 20:15:48 1309

原创 史上最简单的Spring Security教程(三十五):RememberMe记住我之更安全的实现方式-持久化token存储方式PersistentTokenBasedRememberMeServic

前面介绍的几种RememberMe实现方式,全部都是基于RememberMeServices接口的实现TokenBasedRememberMeServices。此实现是将username、过期时间、password、key等按照一定的规则组合之后取MD5值,之后将此值存在浏览器的Cookie中。大部分网站的RememberMe 实现方式都是基于此。但是,将用户的 password 存储在浏览器的 Cookie 中, 始终存在隐患,即使难以实现。因此,Spring Security 框架...

2020-10-15 15:55:38 1405 1

原创 史上最简单的Spring Security教程(三十四):用户名密码验证码(记住我)登录与CA登录融合方案

在上一篇文章史上最简单的Spring Security教程(三十三):用户名密码登录新增验证码和RememberMe(记住我)选项中,介绍了如何基于Spring Security框架默认的用户名密码登录,自定义 Filter 且添加 验证码、记住我 选项。如前面文章所述,一个系统的登录方式不止一种,本文即介绍一下如何基于Spring Security框架默认的用户名密码登录,自定义 Filter 且添加 验证码、记住我 选项。废话不多说,直接看配置。首先,改造一下登录页,在此前的基...

2020-10-15 15:53:45 1050

原创 史上最简单的Spring Security教程(三十三):用户名密码登录新增验证码和RememberMe(记住我)选项

前面我们讲了如何基于Spring Security框架默认的用户名密码登录方式,为其添加RememberMe(记住我)选项。另外,也讲过如何基于Spring Security框架默认的用户名密码登录方式,添加验证码选项。本文即同样基于Spring Security框架默认的用户名密码登录方式,同时添加RememberMe(记住我)、验证码选项。首先,改造登录页,新增记住我、验证码选项。<form th:action="@{/login}" method="pos...

2020-10-10 22:57:45 965

原创 史上最简单的Spring Security教程(三十二):默认用户名密码记住我登录与CA登录融合方案

在上一篇文章史上最简单的史上最简单的Spring Security教程(三十一):默认用户名密码登录新增RememberMe(记住我)选项中,介绍了如何基于 Spring Security 框架默认的用户名密码登录,添加 记住我 选项。如前面文章所述,一个系统的登录方式不止一种,本文即介绍一下如何基于 Spring Security 框架默认的用户名密码登录,添加 记住我 选项后,与CA登录方式共存。废话不多说,直接看配置。首先,改造一下登录页,在此前的基础上,新增CA登录方式。&l...

2020-10-10 22:55:47 924

原创 史上最简单的Spring Security教程(三十一):默认用户名密码登录新增RememberMe(记住我)选项

在我们登录一些网站的时候,通常会有一个选项-记住我。选中该选项,登录成功后,无论浏览器关闭,还是服务重启,只要不清除浏览器缓存信息,且Cookie在网站预设的有效期时间内,则无需重新登录网站即可访问其资源。其实,Spring Security框架也可以实现相同的功能。本文便基于Spring Security框架默认的用户名密码登录为基础,为其添加RememberMe(记住我)选项。首先,修改登录页面,将 记住我 复选框name属性修改为remember-me。<for...

2020-09-27 16:25:59 1356

原创 史上最简单的Spring Security教程(三十):自定义用户名密码及验证码登录与CA登录方式共存详细实现及配置

前面我们讲了CA登录方式的详细实现及配置,也讲了如何改造默认的用户名密码登录方式,添加验证码登录选项。本次,我们就将这两种方式融合在一起,实现共存,以达到用户可以自由选择验证码登录、CA登录方式。其实,重要的逻辑在前面的文章中都以实现过,本次只需合并相应逻辑到一起即可。然后,修改 Spring Security 配置,以实现两种登录方式的共存。@EnableWebSecurity@Configurationpublic class SpringSecurityConfiguration ...

2020-09-27 16:24:00 1093

原创 史上最简单的Spring Security教程(二十九):用户名密码登录添加验证码选项

​在系统登录中,为了防止恶意攻击,通常都会采用验证码登录方式。不过,随着科技的进度,验证码也容易被人破解,那么也就催生除了更为高级的验证方式,如指定图片内容选择、人机交互等复杂的验证方式。不过,这些都不是本次我们要讨论的对象,本次我们只针对普通的验证码方式,来对用户名密码登录方式进行改造。添加依赖首先,我们添加一下本次改造需要使用的第三方依赖,即 hutool 工具包。<dependency> <groupId>cn.hutool</grou.

2020-09-21 11:45:03 1868 2

原创 史上最简单的Spring Security教程(二十八):CA登录与默认用户名密码登录共存详细实现及配置

​在前面的文章中,我们自定义了一些CA登录相关的类,如CertificateAuthorityAuthenticationToken、CertificateAuthorityAuthenticationFilter、CertificateAuthorityDaoAuthenticationProvider等。但是,由于诸多条件的不具备,也就没有办法演示。不过,目前一个新登录方式所需要的逻辑基本都介绍过了,下面,就利用这些已经自定义的类,来尝试如何自定义个新的登录方式-CA登录。并且,CA登录需要与默认.

2020-09-20 14:44:31 3074 1

原创 史上最简单的Spring Security教程(二十七):AuthenticationManager默认实现之ProviderManager详解

Spring Security 框架中的另一个重要接口AuthenticationManager, 被设计用于处理Authentication请求。与AuthenticationProvider接口一致,AuthenticationManager接口中有且只有一个方法,即authenticate(Authentication authentication)方法。Authentication authenticate(Authentication authentication)...

2020-09-17 15:35:33 3296

原创 史上最简单的Spring Security教程(二十五):UsernamePasswordAuthenFilter详解

​在Spring Security框架中,最常用的 Filter 便是表单登录Filter,即 UsernamePasswordAuthenticationFilter。下面我们就来一起详细了解一下这个 Filter 的具体功用。首先,既然是Filter,势必要实现 Filter 接口吧,不过,确实实现了 Filter 接口。从上图中,能清晰的了解到 UsernamePasswordAuthenticationFilter 的继承关系,也确实实现了 Filter 接口。那么,我们便从..

2020-08-28 15:12:40 3561

原创 史上最简单的Spring Security教程(二十六):DaoAuthenticationProvider详解

之前看过很多个版本的Spring Security中获取用户信息并进行密码校验,有在相关的Filter中获取的,也有在默认的DaoAuthenticationProvider中判断Authentication类型进行判断以后直接获取的。不过,这些方式都不太“正宗”,Spring Security有自己的一套流程。至于此流程的详细信息讲解,先不急,本篇文章来认识一下其中比较重要的一环:获取用户信息并进行密码验证,即DaoAuthenticationProvider。Auth...

2020-08-28 15:04:16 12835 3

原创 史上最简单的Spring Security教程(二十四):自定义用户名密码参数名及用户名密码验证路径

​无论是表单登录配置器(FormLoginConfigurer),还是用户密码验证Filter(UsernamePasswordAuthenticationFilter),Spring Security默认的用户名、密码参数名均为username、password。表单登录配置:public FormLoginConfigurer() { super(new UsernamePasswordAuthenticationFilter(), null); usernamePa...

2020-08-24 10:25:37 2581

原创 避坑指南(十):PHP环境安装之后,php页面无法解析

问题描述按照资料,一步一步安装php所需环境,环境安装完毕后,发现访问php不能解析。搜索资料解决,之后又出现访问php就出现下载界面,搞了大半天解决不了。问题分析1、apache没有添加对应的php类型,所以不支持php的脚本解析在IfModule mime_module节点中,AddType application/x-gzip .gz .tgz附近,添加如下配置AddType application/x-httpd-php .php...

2020-08-24 10:22:30 3517

原创 史上最简单的Spring Security教程(二十三):自定义AccessDecisionManager实现类选举法的访问决策

​前面讲过Spring Security框架实现的一个AccessDecisionManager,是少数服从多数的授权访问决策。但是,在具体业务场景中,可能还会遇到类似于选举法的授权场景,即少数服从多数且超过半数同意。那么,本次便参考此授权决策方案,自定义一个AccessDecisionManager。由于核心授权逻辑还是少数服从多数,所以我们部分参考一下ConsensusBased的授权决策逻辑。public void decide(Authentication authent...

2020-08-24 10:17:30 1482

原创 避坑指南(九):WordPress图片等媒体不能上传

问题描述WordPrss后台上传图片、视频等资源时,提示没有上级目录权限。问题分析搜索资料发现,解决方案所说不一。1、 将wp-content/及其下的权限全部改为777此方案虽能解决问题,但是比较粗暴,可能会带来新的安全问题2、先将wp-content/及其下的权限全部改为777,最后改回755先修改wp-content/及其下的权限全部改为777,然后上传图片, 让Wordpress生成一个目录,然后查看是哪个用户创建了该目录。接着,进入到该目录,使用...

2020-08-20 14:34:52 1111

原创 史上最简单的Spring Security教程(二十二):自定义AccessDecisionManager实现简单的访问决策

​在前面讲过的资源权限动态控制业务场景中,我们使用了 Spring Security 框架默认的 AccessDecisionManager,即AffirmativeBased。能实现的访问决策即为任一AccessDecisionVoter授予权限,即代表授予访问权限。但是我们只添加了一个AccessDecisionVoter,即RoleVoter。既然如此,我们就可以简化一下这些逻辑,直接自定义一个新的 AccessDecisionManager,其决策逻辑为:当前请求所需的所有 ...

2020-08-19 13:52:32 1918

原创 史上最简单的Spring Security教程(二十一):AccessDecisionManager简介及自定义访问决策管理器

AccessDecisionManager顾名思义,访问决策管理器。Makesafinalaccesscontrol(authorization)decision做出最终的访问控制(授权)决定。而常用的AccessDecisionManager有三个,分别介绍一下其权限决策逻辑。AffirmativeBasedSpring Security框架默认的AccessDecisionManager。/** * Simple concrete ...

2020-08-10 09:04:03 11710 5

原创 史上最简单的Spring Security教程(二十):自定义AccessDecisionVoter实现必须全部拥有请求所需权限才可访问的需求

​前面我们说了AccessDecisionVoter的一些基本用法,以及常用的一些AccessDecisionVoter实现,当然,也试着自定义了一个AccessDecisionVoter。细心的同学可能有所发现,这个自定义的AccessDecisionVoter不寻常。为什么呢?因为它内部的授权决策逻辑刚好就是必须拥有当前请求所需的全部权限才会授权成功。同时,这也是这次我们要着重说的内容。public int vote(Authentication authenticatio...

2020-08-07 14:21:34 1381

原创 史上最简单的Spring Security教程(十九):AccessDecisionVoter简介及自定义访问权限投票器

为了后续对AccessDecisionManager的介绍,我们先来提前对AccessDecisionVoter做个简单的了解,然后,在捎带手自定义一个AccessDecisionVoter。AccessDecisionVoter的注释介绍如下:Indicatesaclassisresponsibleforvotingonauthorizationdecisions. Thecoordinationofvoting(iepolling{@codeA...

2020-08-07 14:19:57 4020 2

原创 史上最简单的Spring Security教程(十八):FilterSecurityInterceptor实现每个请求只处理一次

在前面的资源权限动态控制中,我们说了如何通过自定义 FilterSecurityInterceptor 来实现资源权限的动态控制。不知道大家发现没有,在 FilterSecurityInterceptor 实例的定义过程中,我们设置了其 observeOncePerRequest 属性为 false。这是出于什么目的呢?其实,很简单。比如用户发起某个访问请求,首先经过默认的 FilterSecurityInterceptor,经过权限检查,需要身份认证权限,此时已经登录,权限认证通过;再交给自定义...

2020-08-05 09:22:25 2012 3

原创 IDEA重大版本!IntelliJ IDEA 2020.2发布

​IDEA重大版本!IntelliJ IDEA 2020.2发布!众多重磅功能!IntelliJ IDEA 2020.2可直接在IDE内部查看和合并GitHub拉取请求,使用Inspections小部件快速在文件中的警告和错误之间导航,如果更改会破坏其他文件,通过Problems工具窗口查看当前文件中的问题的完整列表并获得通知。您可以使用Jakarta EE,并获得对Quarkus,Micronaut和OpenAPI的更好支持。Java支持Java 15尽管Java 15的...

2020-08-05 09:21:13 1630 2

Eclipse svn插件1.8版本

Eclipse svn插件1.8版本,对应小乌龟1.6版本

2017-06-02

Navicat Mysql版11.0.10

Navicat Mysql版11.0.10

2017-06-02

PLSQL Developer 12.0.1简体中文绿色版32位

PLSQL Developer 12.0.1简体中文绿色版32位,含注册码

2017-06-02

java中如何使用过滤器过滤指定格式的文件

使用java过滤器,过滤掉目录文件和非.txt文件,并输出结果。

2011-10-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除