自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

字母哥博客

让知识产生价值,让程序员改变世界

原创 微服务管理平台nacos虚拟ip负载均衡集群模式搭建

一、Nacos简介 Nacos是用于微服务管理的平台,其核心功能是服务注册与发现、服务配置管理。 Nacos作为服务注册发现组件,可以替换Spring Cloud应用中传统的服务注册于发现组件,如:Eureka、consul等,支持服务的健康检查。 Nacos作为服务配置中心,可以替换Sprin...

2019-12-13 13:08:48

阅读数 148

评论数 0

原创 白话讲解微服务注册发现及负载均衡

一、公益图书馆例子 笔者不想直接用专业的术语来说明“微服务注册与发现”,所以我们来看生活中的一个案例:“公益图书馆”。随着人们生活水平的不断提高,追求精神食粮的朋友也越来越多。笔者曾经在一些城市看见过公益图书馆,其运行逻辑是:一些公益组织和个人提供一块场所,然后由组织内的人向图书馆内捐书。捐出的书...

2019-12-12 07:47:20

阅读数 143

评论数 0

原创 使用Spring Data JPA的Specification构建数据库查询

Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL。Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展JpaRepository,我们获得了一堆通用的CRUD方法,例如save,findAll,delete...

2019-12-10 14:05:44

阅读数 141

评论数 0

原创 白话OAuth2用户认证及鉴权标准流程

一、OAuth2需求场景 在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色: 资源拥有者(User) - 指应用的用户 认证服务器 (Authorization Server) - 提供登录认证接口的服务器,比如:github等 资源服务器 (Resource...

2019-12-09 13:32:58

阅读数 140

评论数 0

原创 SpringSecurity框架下实现CSRF跨站攻击防御

一、什么是CSRF 很多朋友在学习Spring Security的时候,会将CORS(跨站资源共享)和CSRF(跨站请求伪造)弄混,以为二者是一回事。其实不是,先解释一下: CORS(跨站资源共享)是局部打破同源策略的限制,使在一定规则下HTTP请求可以突破浏览器限制,实现跨站访问。 CSRF是...

2019-12-09 07:57:06

阅读数 142

评论数 0

原创 QQ登录功能之如何获取用于本地测试的APPID

本文主要说明一下开发者如何在QQ互联创建测试应用,从而分配给我们一套APP ID和APP KEY,在我们平时学习的时候使用。 一、QQ互联注册开发者 要想使用QQ登陆的功能,首先你必须是腾讯开发者。腾讯搞了一大堆的开放平台,有点乱。如果你还不是腾讯开发者,先去QQ互联网站https://conne...

2019-12-05 08:07:31

阅读数 148

评论数 0

原创 SpringSecurity环境下配置CORS跨站资源共享规则

一、CORS简述 要说明CORS(Cross Origin Resourse-Sharing) 跨站资源共享,就必须先说同源策略。长话短说,同源策略就是向服务端发起请求的时候,以下三项必须与当前浏览器应用一致:域名、端口、协议。用白话说:就是你的应用发送请求不能访问别人的资源,否则浏览器就会限制你...

2019-12-04 08:00:09

阅读数 140

评论数 0

原创 SpringSecurity代码实现JWT接口权限授予与校验

通过笔者前两篇文章的说明,相信大家已经知道JWT是什么,怎么用,该如何结合Spring Security使用。那么本节就用代码来具体的实现一下JWT登录认证及鉴权的流程。 一、环境准备工作 建立Spring Boot项目并集成了Spring Security,项目可以正常启动 通过contro...

2019-12-03 07:54:31

阅读数 146

评论数 0

原创 在Spring Security框架下JWT的实现细节原理

一、回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法。其授权与鉴权流程浓缩为以下两句话 授权:使用可信用户信息(用户名密码、短信登录)换取带有签名的JWT令牌 鉴权:解签JWT令牌,校验用户权限。具有某个接口访问权限,开放该接口访问。 二、Sp...

2019-12-02 13:30:46

阅读数 379

评论数 0

原创 通俗化讲解JWT鉴权的使用场景及结构安全

一、基于Session的应用开发的缺陷 在我们传统的BS应用开发方式中,都是使用session进行状态管理的,比如说:保存登录、用户、权限等状态信息。这种方式的原理大致如下: 用户登陆之后,将状态信息保存到session里面。服务端自动维护sessionid,即将sessionid写入cooki...

2019-12-02 07:38:09

阅读数 140

评论数 0

原创 结合开源软件kaptcha讲解登录验证码功能的实现

一、验证码生成之配置使用kaptcha 使用google开源的验证码实现类库kaptcha,通过maven坐标引入 <dependency> <groupId>com.github.penggle</groupId> <artifactId&g...

2019-11-29 13:37:31

阅读数 150

评论数 0

原创 图文详解应用登录验证码的多种实现方案

在本号的一系列Spring Security文章中,先后介绍了各种登录验证及授权中的知识点,如:spring-security简介并与shiro对比、 formLogin模式登录认证、动态数据登录验证与权限分配、账户多次登录失败锁定、RememberMe记住我功能,等等文章。笔者觉得以上的这些实际...

2019-11-29 07:51:32

阅读数 140

评论数 0

原创 Spring Security框架下实现两周内自动登录"记住我"功能

本文是Spring Security系列中的一篇。在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户、角色、权限相关信息,从而实现了登录及授权相关的功能。这一节就在此基础上新增,登录过程中经常使用的“记住我”功能,也就是我们经...

2019-11-28 13:10:46

阅读数 139

评论数 0

原创 Spring Security之多次登录失败后账户锁定功能的实现

在上一次写的文章中,为大家说到了如何动态的从数据库加载用户、角色、权限信息,从而实现登录验证及授权。在实际的开发过程中,我们通常会有这样的一个需求:当用户多次登录失败的时候,我们应该将账户锁定,等待一定的时间之后才能再次进行登录操作。 一、基础知识回顾 要实现多次登录失败账户锁定的功能,我们需要先...

2019-11-28 07:44:56

阅读数 151

评论数 0

原创 SpringSecurity动态加载用户角色权限实现登录及鉴权

很多人觉得Spring Security实现登录验证很难,我最开始学习的时候也这样觉得。因为我好久都没看懂我该怎么样将自己写的用于接收用户名密码的Controller与Spring Security结合使用,这是一个先入为主的误区。后来我搞懂了:根本不用你自己去写Controller。你只需要告诉...

2019-11-27 07:39:55

阅读数 145

评论数 0

原创 结合RBAC模型讲解权限管理系统需求及表结构创建

在本号之前的文章中,已经为大家介绍了很多关于Spring Security的使用方法,也介绍了RBAC的基于角色权限控制模型。但是很多朋友虽然已经理解了RBAC控制模型,但是仍有很多的问题阻碍他们进一步开发。比如: RBAC模型的表结构该如何创建? 具体到某个页面,某个按钮权限是如何控制的? 为...

2019-11-26 13:30:32

阅读数 148

评论数 0

原创 将Swagger2文档导出为HTML或markdown等格式离线阅读

网上有很多《使用swagger2构建API文档》的文章,该文档是一个在线文档,需要使用HTTP访问。但是在我们日常使用swagger接口文档的时候,有的时候需要接口文档离线访问,如将文档导出为html、markdown格式。又或者我们不希望应用系统与swagger接口文档使用同一个服务,而是导出H...

2019-11-26 07:58:15

阅读数 168

评论数 0

原创 图文详解基于角色的权限控制模型RBAC

我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问、操作、数据权限。形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control)、强制访问控制(MAC: Mandatory Access Control)、基于属性的权限验证(ABA...

2019-11-25 12:22:10

阅读数 154

评论数 0

原创 SpringSecurity退出功能实现的正确方式

本文将介绍在Spring Security框架下如何实现用户的"退出"logout的功能。其实这是一个非常简单的功能,我见过很多的程序员在使用了Spring Security之后,仍然去自己写controller方法实现logout功能,这种做法就好像耕地,你有机械设备你不用,...

2019-11-25 07:50:00

阅读数 156

评论数 0

原创 结合Spring Security进行web应用会话安全管理

在本文中,将为大家说明如何结合Spring Security 和Spring Session管理web应用的会话。 一、Spring Security创建使用session的方法 Spring Security提供4种方式精确的控制会话的创建: always:如果当前请求没有session存在,...

2019-11-22 07:40:12

阅读数 145

评论数 0

原创 使用Spring安全表达式控制系统功能访问权限

一、SPEL表达式权限控制 从spring security 3.0开始已经可以使用spring Expression表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式函...

2019-11-21 08:03:59

阅读数 143

评论数 0

原创 SpringSecurity系列之自定义登录验证成功与失败的结果处理

一、需要自定义登录结果的场景 在我之前的文章中,做过登录验证流程的源码解析。其中比较重要的就是 当我们登录成功的时候,是由AuthenticationSuccessHandler进行登录结果处理,默认跳转到defaultSuccessUrl配置的路径对应的资源页面(一般是首页index.html...

2019-11-20 07:50:54

阅读数 146

评论数 0

原创 结合参数接收响应转换原理讲解SpringBoot常用注解

一、常用注解回顾 1.1 @RequestBody与@ResponseBody //注意并不要求@RequestBody与@ResponseBody成对使用。 public @ResponseBody AjaxResponse saveArticle(@RequestBody ArticleV...

2019-11-19 08:10:26

阅读数 140

评论数 0

原创 Spring Security登录验证流程源码解析

一、登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链。当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了。 SpringSecurity提供了多种登录认证的方式,由多种Filter过滤器来实现,比如: BasicAu...

2019-11-18 07:55:40

阅读数 141

评论数 0

原创 详解Spring Security的formLogin登录认证模式

一、formLogin的应用场景 在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄。对于一个完整的应用系统,与登录验证相关的页面都是高...

2019-11-16 10:30:05

阅读数 269

评论数 0

原创 详解Spring Security的HttpBasic登录验证模式

一、HttpBasic模式的应用场景 HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式。它的目的并不是保障登录验证的绝对安全,而是提供一种“防君子不防小人”的登录验证。 就好像是我小时候写日记,都买一个带小锁头的日记本,实际上这...

2019-11-15 07:55:31

阅读数 139

评论数 0

原创 java应用性能调优之详解System的gc垃圾回收方法

一、什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象)。名词解释:GC,Garbage Collection,垃圾回收,下文会经常使用。 二、谁可以调用System.gc...

2019-11-13 07:50:24

阅读数 165

评论数 0

原创 参与国际化项目需遵循的java命名规范

笔者最近帮助一些朋友应聘远程工作(一般都是一些国外的项目),国外的项目负责人一般都会要求提供github账号或者一些源代码,很多朋友在这一关就被筛选掉了,其中不乏一些我认为技术非常厉害的行业大牛,他们都研发过很多的大型项目,经验与技术实力都非常不错。那究竟是为什么呢?我经过仔细的研究,发现他们都有...

2019-11-13 07:42:36

阅读数 140

评论数 0

原创 Java Stream函数式编程第三篇:管道流结果处理

一、Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API。在使用的过程中分为三个阶段。在开始本文之前,我觉得仍然需要给一些新朋友介绍一下这三个阶段,如图: 第一阶段(图中蓝色):将集合、数组、或...

2019-11-12 07:48:19

阅读数 144

评论数 0

原创 详解SpringBoot应用跨域访问解决方案

一、什么是跨域访问 说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。虽然跨域访问被禁止之后,可以在一定程度上提高了应用的安全性,但也为开发带来...

2019-11-11 08:23:32

阅读数 154

评论数 0

原创 对比讲解lambda表达式与传统接口函数实现方式

在本号之前写过的一些文章中,笔者使用了lambda表达式语法,一些读者反映说代码看不懂。本以为java 13都已经出了,java 8中最重要特性lambda表达式大家应该都掌握了,实际上还是存在大量的程序员没有使用java8,还有的使用了java8也不会使用lambda表达式。所以,写这篇文章还是...

2019-11-08 07:55:58

阅读数 194

评论数 0

原创 使用Spring Data JPA进行数据分页与排序

一、导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好。所以处理较大数据查询结果展现的时候,分页查询是必不可少的。分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控制,导致用户可能在不同的页看到同一条数据。那么,本文的主要内容就是给大家介绍一下,如何使用Spri...

2019-11-07 08:00:35

阅读数 149

评论数 0

原创 在SpringBoot中使用flyway进行数据库版本管理

本文大纲 flyway是什么 能帮助我们解决什么问题 springboot环境下使用flyway flyway的工作原理 一、flyway是什么 Flyway是一个开源的数据库版本管理工具,并且极力主张“约定大于配置”,简单、专注、强大。可以使用SQL完成数据同步,或者基于特定数据库的语...

2019-11-05 08:47:40

阅读数 151

评论数 0

原创 持久层框架JPA与Mybatis该如何选型

一、现状描述 目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis。JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernate实现),是基于Spring的数据持久层框架,也就是说它只能用在Spring环境内。Mybatis...

2019-11-04 08:40:54

阅读数 215

评论数 0

原创 如何在Spring Boot中使用Cookies

一、 导读 本文大纲 读取HTTP Cookie 设置HTTP Cookie 读取所有Cookie[] 为Cookie设置过期时间 Https与Cookie HttpOnly Cookie 删除Cookie HTTP Cookie(也称为Web cookie,浏览器cookie)是服务器在...

2019-11-03 09:39:52

阅读数 153

评论数 0

原创 使用Java8 Stream API对Map按键或值进行排序

一、什么是Java 8 Stream 使用Java 8 Streams,我们可以按键和按值对映射进行排序。下面是它的工作原理: 将Map或List等集合类对象转换为Stream对象 使用Streams的sorted()方法对其进行排序 最终将其返回为LinkedHashMap(可以保留排序顺序...

2019-11-02 12:44:24

阅读数 300

评论数 0

原创 像使用SQL一样对List对象集合进行排序

在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分)。你知道怎么对一个Movie对象组成的List集合,先按照是否收藏字段倒序排序,再按照评分的倒序进行排序么?如果您不知道4行代码以内...

2019-10-31 09:57:25

阅读数 139

评论数 0

原创 使用JRebel插件实现SpringBoot应用代码热加载

前言 在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果。那么有没有一种方式能够快速的、自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,在我之前的文章里面给读者介绍了使用springboot-devtools实现热加载的方法。本文就给大家介绍另外一种方...

2019-10-30 08:13:53

阅读数 148

评论数 0

原创 Java Stream函数式编程图文详解(二):管道数据处理

一、Java Stream管道数据处理操作 在本号之前发布的文章《Java Stream函数式编程?用过都说好,案例图文详解送给你》中,笔者对Java Stream的介绍以及简单的使用方法给大家做了介绍。在开始本文之前,我们有必要介绍一下这张Java Stream 数据处理过程图,图中主要分三个部...

2019-10-29 10:26:42

阅读数 138

评论数 0

原创 SpringBoot生命周期管理之停掉应用服务几种方法

前言 在生产环境下管理Spring Boot应用的生命周期非常重要。Spring容器通过ApplicationContext处理应用服务的所有的beans的创建、初始化、销毁。本文着重于生命周期中的销毁阶段的处理,我将使用多种方式来实现关闭Spring Boot应用服务。如果你需要了解关于Spri...

2019-10-28 08:10:02

阅读数 121

评论数 0

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