自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (4)
  • 论坛 (1)

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

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

2020-07-23 15:46:28 138

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

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

2020-07-20 16:34:38 99

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

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

2020-06-11 17:05:13 373

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

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

2020-03-11 15:41:36 139

原创 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 480

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

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

2020-01-13 19:34:12 771

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

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

2019-12-16 09:04:25 51

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

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

2020-09-17 15:35:33

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

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

2020-08-28 15:12:40 91

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

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

2020-08-28 15:04:16 175

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

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

2020-08-24 10:25:37 100

原创 避坑指南(十):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 50

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

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

2020-08-24 10:17:30 52

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

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

2020-08-20 14:34:52 40

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

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

2020-08-19 13:52:32 63

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

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

2020-08-10 09:04:03 67

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

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

2020-08-07 14:21:34 59

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

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

2020-08-07 14:19:57 122

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

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

2020-08-05 09:22:25 91

原创 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 560 1

原创 史上最简单的Spring Security教程(十七):FilterSecurityInterceptor默认初始化逻辑剖析

Spring Security框架默认会自动创建一个FilterSecurityInterceptor实例,如我们前面所述,自定义的FilterSecurityInterceptor要么是在默认FilterSecurityInterceptor实例之前,要么是在之后,看具体业务场景。为啥我们不能替换掉默认的FilterSecurityInterceptor实例呢?先来剖析一下默认的FilterSecurityInterceptor实例初始化逻辑。​SecurityMeta...

2020-08-05 09:19:22 144

原创 小领导举报我不干活,给我穿小鞋?没想到却反被我举报到内伤,实在忍不了了

​毕业后一直在一家单位工作,由于客户性质的关系,经常到客户现场去,坐人家眼皮底下办公。美其名曰提高效率。其实,一则是怕你在公司办公,项目经理不在管不住;二则是项目经理有啥事情可以推给技术,自己玩游戏。那会儿年轻嘛,啥也不懂,就这样懵懵懂懂的过了几年。多年以来的加班和久坐,终于酿成了悲剧,住院了,做了个小手术(MD,菊花又一紧),程序员都懂哈。那时候也没女票,就自己在医院抗,家人也没说,说多了都是泪。不过术后恢复的还算不错,不过就是一段时间内,不能经常坐。给公司反馈后,公司还算可以,同意缩短...

2020-07-31 10:27:40 171

原创 重温Java基础(八):运算符级别

​前情回顾在上一篇文章重温Java基础(七):位运算符中,详细介绍了Java中的位运算符,包括 & ("and")、| ("or")、^ ("xor")、~ ("not")等。同时,也介绍了这些位运算符的一些特殊用法,如取固定二进制位、快速幂、清零等。本章重点本章将介绍Java中的运算符级别。运算符级别 运算符 结合性 [ ] . ( )(方法调用) 从左...

2020-07-29 13:49:14 41

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

​FilterSecurityInterceptor作为Spring Security Filter Chain的最后一个Filter,承担着非常重要的作用。如获取当前 request 对应的权限配置,调用访问控制器进行鉴权操作等,都是核心功能。先简单看一下FilterSecurityInterceptor类的主要功用。获取当前 request 对应的权限配置,首先是调用基类的beforeInvocation方法。public void invoke(FilterInv...

2020-07-29 13:46:34 199

原创 史上最简单的Spring Security教程(十五):资源权限动态控制(FilterSecurityInterceptor)

在前面的讲解中,我们分别对动态用户、动态权限的实现做了相关介绍。可能大家在看的过程中,会发现一个问题:目前都是通过注解控制权限的,并且角色是事先定义好的,且需要数据库、Java程序保持一致。这是非常不友好的,不能自由的定义角色及其所能控制的资源。角色比较少且固定的业务场景还好,如OA,只有管理员和普通用户两种角色。但是遇到大型业务系统,角色细且繁多,需要自定义,且需要频繁变更其所拥有的资源,那么,目前的形式就显得非常笨拙。接下来,就如何进行资源权限动态控制进行讲解,要实现的目标为:Java程序...

2020-07-27 10:26:36 130

原创 史上最简单的Spring Security教程(十四):动态权限(自定义UserDetailsService)

在前面的示例中,我们在自定义的UserDetailsService中,固化了用户所拥有的的权限,即User。其实,这和最早我们在配置文件配置用户的用户名、密码、权限列表并无二致,这种固化的方法尤其独到之处,但却并不适合所有业务场景。本例,我们来说一下如何实现动态权限。首先,定义角色表、角色用户关联表。create table SYS_ROLE( ID varchar(32) not null comment '主键', NAME...

2020-07-27 10:23:43 280

原创 史上最简单的Spring Security教程(十三):动态用户(自定义UserDetailsService)

前面我们讲过的例子,都是在配置文件中配置的用户信息,包括用户名、密码、角色等,而这些,会被初始化到InMemoryUserDetailsManager中,即存储在内存中。但是,在实际的业务场景中,不可能只有一个用户,更不可能用户信息都是固定的,而是动态的,需要从存储的地方获取,如数据库。首先,我们把用户信息存储在数据库中,创建数据库springsecuritylearning,编码方式utf8mb4,排序规则utf8mb4_bin。然后定义用户表SYS_USER。crea...

2020-07-23 15:12:40 58

原创 史上最详细的WordPress安装教程(六):安装WordPress

WordPress官网下载安装源码,也可以在中文官网下载中文版:https://cn.wordpress.org/download/。如果一直429,那就百度其它下载资源吧,无解。下载源码包之后,通过ftp、ssh等相关工具上传到服务器,也可以使用wget命令直接下载到服务器,省的来回传。

2020-07-20 16:28:23 112

原创 史上最简单的Spring Security教程(十二):@PreAuthorize注解实现权限控制

我们前面讲的所有的例子,都是没有权限控制的,也就是只要登录就可以访问任何资源,不需要其它的权限。但是,现实生活中肯定不是这样。比如你是普通员工,只能查看自己的工作记录;而部门经理作为领导,则可以查看整个部门员工的工作记录;再如企业老板,作为最大的权限拥有者,可以查看整个公司员工的工作记录。这就是所谓的权限控制,不同角色拥有的不同资源。而Spring Security框架最大的功用就在于此。当然,实现权限控制体系非常复杂,我们一步一步来,本次先讲一个如何通过注解实现权限控制需求。Spri...

2020-07-17 17:11:11 238

原创 史上最详细的WordPress安装教程(五):安装phpMyAdmin

官网下载安装包官网地址为 https://www.phpmyadmin.net/,点击 Download,可以跳转到安装包下载界面。选择下载历史版本,也可以下载最新版本,最新版本在右上角有按钮,可直接下载。历史版本可通过点击Download按钮,寻找历史版本下载页面。经过一系列查找,历史页面下载地址为:https://www.phpmyadmin.net/files/。选择下载4.8.3版本。下载好之后,可通过ftp、ssh等工具将压缩包上传到服务器。也可以复制下载链接,直...

2020-07-17 17:07:43 108

原创 史上最简单的Spring Security教程(十一):url区分不同的登录失败场景

​前面我们自定义了登录失败页面,其中有简单的登录失败原因的展示。不过,有更为特殊的业务场景,需要从url中区分不同的用户登录失败场景,以方便其它关联操作。如用户名密码错误/login_fail?error=1,账号锁定/login_fail?error=2等。先定义几种常见的登录失败类型。FAILURE(0, "登录失败!"),​BADCREDENTIALS(1, "用户名密码错误!"),​LOCKED(2, "用户已被锁定,无法登录!"),​ACCOUNTEXPIRED(3, "..

2020-07-15 16:09:30 124

原创 史上最详细的WordPress安装教程(四):安装mysql 5.7

安装mysql添加源rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm#或wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpmrpm -ivh mysql57-community-release-el7-9.noarch.rpm​安装yum -y install mysql-communi...

2020-07-15 16:04:04 127

原创 史上最详细的WordPress安装教程(三):安装php 5.6及php-fpm、php-pdo、php-mysql等插件

​安装php 5.6yum -y install epel-releaserpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpmrpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remiyum install --enablerepo=remi --enablerepo=remi-php56 php php-gd php-opcache php-devel ph

2020-07-12 17:12:41 91

原创 史上最详细的WordPress安装教程(二):Apache服务安装

​安装Apacheyum -y install httpd注意:该方法安装完毕后,Apache配置文件路径为 /etc/httpd/conf/httpd.conf命令执行完毕后看不到效果,这时可使用命令查看Apache服务状态service httpd status或者systemctl status httpd.service开启服务systemctl start httpd.service关闭服务systemctl stop httpd.ser...

2020-07-07 15:15:23 80

原创 最详细的WordPress安装教程(一):简介及环境准备

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

2020-07-07 15:11:54 228

原创 史上最简单的Spring Security教程(十):AuthenticationFailureHandler高级用法

在前面,我们简述了如何自定义用户登录失败页面。但是,在工作中,所遇到的业务场景压根不会这么简单。比如要求记录登录失败时的IP、时间、SessionId;发送登录失败提醒到微信、邮箱、短信,提醒用户当前登录失败事件;同时记录到日志中,或者发送到远端日志监控平台,分析是否是攻击行为等等。而这一切,Spring Security框架非常贴心的提供了AuthenticationFailureHandler接口,当然了,框架同时也提供了一些简单的实现,最重要的,用户可自行扩展,以满足不同的业务场景...

2020-07-07 15:09:56 718

原创 史上最简单的Spring Security教程(九):自定义用户登录失败页面

生活中肯定存在这样的场景,在登录某个网站时,难免会忘记密码,或是验证码输入错误,造成多次尝试。所以,有必要适度的提醒用户,到底是什么原因造成了登录失败,如用户名密码不正确、验证码错误等等。由于Spring Security框架自带的登录失败url为/login?error,除了知道是登录失败了,其它的,可以说是毫无用处。所以,需要我们自定义用户登录失败页面。先来做一个简单的登录失败页面,简单的展示一下失败信息。......​<div class="col-sm-12 ...

2020-07-03 16:04:11 131

原创 史上最简单的Spring Security教程(八):用户登出成功LogoutSuccessHandler高级用法

​大多数业务场景下,自定义登出成功页面也满足不了一些要求,更别提默认的登出成功页面。这时候,就需要别的方案支持,幸运的是,Spring Security框架还真就非常贴心的提供了这样一个接口LogoutSuccessHandler, 专门用于处理用户登出成功请求。当然了,对于LogoutSuccessHandler接口,Spring Security框架有一些默认的实现,也可以自行扩展。同用户登录成功的业务场景,在用户登出成功后,我们也要通过邮件、短信、微信,来通知用户,在什么时间,什么...

2020-07-01 11:16:32 484

原创 史上最简单的Spring Security教程(七):用户登出成功url配置

Spring Security框架默认的用户登出成功url为/login?logout,大多数情况下,由于种种原因,这都不满足我们的业务场景,都需要自定义。Spring Security框架自定义用户登出成功url也比较简单。http.logout().logoutSuccessUrl("/logout_success").permitAll()这里的permitAll()非常重要,还记得之前Spring Security框架默认的用户登出成功url为/login?log...

2020-07-01 11:14:30 88

原创 史上最简单的Spring Security教程(六):用户登出

既然有用户登录,势必就会有用户登出,Spring Security也提供了比较详细的登出配置。其实,之前的程序中,依然支持用户登出,不知道有人点过退出登录按钮没有,结果是404。其实,原因也很简单,我们的退出登录按钮使用超链接实现的,而超链接是 GET 方式请求的,在Spring Security用户登出配置中,CSRF默认是开启的,并没有关闭,不支持 GET 类型的用户登出请求。因此,就会抛出404的错误码。...... if (http.getConfigurer(...

2020-07-01 11:12:37 127

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

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

2011-10-24

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

window7 64位旗舰版下安装Myeclipse 6.0之后的问题

发表于 2011-11-22 最后回复 2012-11-30

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