Spring Security

深入理解 HttpSecurity【源码篇】

一曲冷凌霜 提交于 2020-10-03 00:24:00
HttpSecurity 也是 Spring Security 中的重要一环。我们平时所做的大部分 Spring Security 配置也都是基于 HttpSecurity 来配置的。因此我们有必要从源码的角度来理解下 HttpSecurity 到底干了啥? 1.抽丝剥茧 首先我们来看下 HttpSecurity 的继承关系图: 可以看到,HttpSecurity 继承自 AbstractConfiguredSecurityBuilder,同时实现了 SecurityBuilder 和 HttpSecurityBuilder 两个接口。 我们来看下 HttpSecurity 的定义: public final class HttpSecurity extends AbstractConfiguredSecurityBuilder<defaultsecurityfilterchain, httpsecurity> implements SecurityBuilder<defaultsecurityfilterchain>, HttpSecurityBuilder<httpsecurity> { //... } 这里每一个类都带有泛型,看得人有点眼花缭乱。 我把这个泛型类拿出来和大家讲一下,小伙伴们就明白了。 泛型主要是两个,DefaultSecurityFilterChain 和

Spring Boot Admin:微服务应用监控

给你一囗甜甜゛ 提交于 2020-10-02 06:57:00
Spring Boot Admin:微服务应用监控 SpringBoot实战电商项目mall(20k+star)地址: github.com/macrozheng/… 摘要 Spring Boot Admin 可以对SpringBoot应用的各项指标进行监控,可以作为微服务架构中的监控中心来使用,本文将对其用法进行详细介绍。 Spring Boot Admin 简介 SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标,Spring Boot Admin通过这些指标来监控SpringBoot应用,然后通过图形化界面呈现出来。Spring Boot Admin不仅可以监控单体应用,还可以和Spring Cloud的注册中心相结合来监控微服务应用。 Spring Boot Admin 可以提供应用的以下监控信息: 监控应用运行过程中的概览信息; 度量指标信息,比如JVM、Tomcat及进程信息; 环境变量信息,比如系统属性、系统环境变量以及应用配置信息; 查看所有创建的Bean信息; 查看应用中的所有配置信息; 查看应用运行日志信息; 查看JVM信息; 查看可以访问的Web端点; 查看HTTP跟踪信息。 创建admin-server模块 这里我们创建一个admin-server模块来作为监控中心演示其功能。 在pom.xml中添加相关依赖: <

Spring Security如何优雅的增加OAuth2协议授权模式

不羁岁月 提交于 2020-10-01 13:00:17
一、什么是OAuth2协议? OAuth 2.0 是一个关于授权的开放的网络协议,是目前最流行的授权机制。 数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。 由于授权的场景众多,OAuth 2.0 协议定义了获取令牌的四种授权方式,分别是: 授权码模式 :授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。 简化模式 :简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。 密码模式 :密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。 客户端模式 :客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求

五份王者文档+思维导图,全面解析SpringSecurity

…衆ロ難τιáo~ 提交于 2020-10-01 12:51:21
spring全家桶,一个和程序员息息相关的家族,每一个家族成员都是程序员好朋友,而作为其中安全认证的Spring Security。更是被程序员独宠。 Spring Security是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。 而关于这个程序员的宠儿,前段时间,我从朋友那里整到了5份文档+一份思维导图,对于这份资料,我给两个字评价:膜拜!王者晋级,就在眼前,不相信的可以跟着一起来看看! 声明: Spring Security王者晋级文档 以及相关 梳理思维脑图 等由于篇幅等的原因,大部分以截图展示,所以可提供源文件给每位感兴趣的小伙伴,直接来私信我口令【王者】即可回复100%免费分享下载,一起晋级王者! Spring Security观后感——手绘思维脑(供参考) 基本运行原理 自定义认证逻辑 个性化认证流程 这份思维导图,希望各位拿到后可以根据我的代码,自己实现验证一下,纸上得来终觉浅,绝知此事要躬行嘛 Spring Security王者晋级文档-Spring Security 4.2内部资料 Spring

总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇

放肆的年华 提交于 2020-10-01 09:39:35
本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 本文为大家介绍Java IO-创建文件夹的四种方法,及其优缺点的解析。 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力。 1.传统API创建文件夹方式 Java传统的IO API种使用 java.io.File 类中的 file.mkdir() 和 file.mkdirs() 方法创建文件夹 file.mkdir() 创建文件夹成功返回true,失败返回false。如果被创建文件夹的父文件夹不存在也返回false.没有异常抛出。 file.mkdirs() 创建文件夹连同该文件夹的父文件夹,如果创建成功返回true,创建失败返回false。创建失败同样没有异常抛出。 [@Test](https://my.oschina.net/azibug) void testCreateDir1() { //“D:\data111”目录现在不存在 String dirStr = "D:\\data111\\test"; File directory = new File(dirStr); //mkdir boolean hasSucceeded = directory

从零开始的SpringBoot前后端分离入门级项目(五)

陌路散爱 提交于 2020-10-01 08:21:35
一个很正常的目录 前情回顾 数据传输对象(DTO) 创建登录和注册功能的DTO UserLoginDTO UserRegisterDTO 修改UserController 修改UserService 用户初始权限的设置 初始权限的设置 添加初始权限和查询用户角色 授予初始权限 启用事物管理 改进用户登录模块 保护用户的隐私信息! 前情回顾 在前一篇博客我们成功的编写了登录与注册的接口,但是还存在着一些问题,这篇博客我们将会更深入的对登录与注册的进行讲解。 数据传输对象(DTO) 我们在登录或者注册时,其实只用到了User对象的某些属性,在访问别的用户时也不该把别的用户的密码等字段给查询出来,这时候如果我们全都使用User对象则会产生部分冗余的字段,这些冗余的部分就如我们前面说过的一样会降低数据传输的效率,所以我们首先从这里入手,创建出不同情形下所需要用到的DTO。 创建登录和注册功能的DTO UserLoginDTO 用户登录时我们只需要用户输入用户名和密码,所以UserLoginDTO中仅有两个字段: @Data @AllArgsConstructor @NoArgsConstructor public class UserLoginDTO { @NotNull ( message = "账号不允许为空" ) private String username ; @NotNull

膜拜!腾讯顶配SpringBoot进阶宝典,完美贴合开发实际

旧巷老猫 提交于 2020-09-30 16:07:44
前言 在过去的几年时间里,最让人兴奋、回头率最高、最能改变游戏规则的东西,大概就是SpringBoot了。它基于约定大于配置原则,甚至有望能够在蓬勃发展的快速应用开发领域成为其领导者。 目前JAVAEE应用体系中繁重的配置、低下的开发效率、高难度的三方集成, 复杂的部署流程等等一直被开发人员所诟病。随着整个架构体系的变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。因而Springboot这个技术显得尤为重要。 能学好Springboot肯定是能在自己的求职简历上添上一个亮点。学习的过程中有一本好的工具书作为参考其实也是尤为重要的。下面我要介绍的这份 腾讯内部Springboot进阶文档 就用大量的篇幅对比讲解多种同类技术的知识点、使用和区别,大家可以根据自己的喜好进行技术选型;还 讲解了时下流行的接口架构风格RESTful,以及用来实现高并发的Redis和系统间通信的中间件RabbitMQ 最后更是融合了所讲的全部知识点,讲解了两个常用又实用的实战项目。 篇幅限制只能将重点内容展示出来了,需要这份腾讯SpringBoot文档的朋友,获取方式在文末!!! 入门篇 初识Spring Boot 准备开发环境 搭建环境 熟悉Maven 使用开发工具 安装开发工具IDEA及插件 比较IDEA与Eclipse 基础篇

SpringBoot与SpringSecurity整合

梦想的初衷 提交于 2020-09-30 13:25:30
SpringBoot与SpringSecurity整合 依赖 < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > <!-- Thymeleaf --> < dependency > < groupId > org.thymeleaf </ groupId > < artifactId > thymeleaf-spring5 </ artifactId > </ dependency > < dependency > < groupId > org.thymeleaf.extras </ groupId > < artifactId > thymeleaf-extras-java8time </ artifactId > </ dependency > <!-- SpringSecurity --> < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </

List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

穿精又带淫゛_ 提交于 2020-09-28 17:40:39
最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了, 如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华 。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。 总结java中创建并写文件的5种方式 总结java从文件中读取数据的6种方法 总结java创建文件夹的4种方法及其优缺点 总结java中删除文件或文件夹的7种方法 总结java中文件拷贝剪切的5种方式 比如之前我已经写了上面的这些内容, 如果对java基础知识总结系列感兴趣的同学可以关注我的博客(文末给出我的博客地址) 。 一、本文梗概 这一篇文章我想写一下 List集合元素去重的8种方法 ,实际上通过灵活的运用、排列组合不一定是8种,可能有18种方法。 对象元素整体去重的4种方法 按照对象属性去重的4种方法 为了在下文中进行测试内容讲解,我们先做一些初始化数据 public class ListRmDuplicate { private List<String> list; private List<Player> playerList; @BeforeEach public void setup() { list = new ArrayList<>(); list.add("kobe"); list.add("james");

第 1-2 课:Spring Boot 2.0 都更新了什么(上)

故事扮演 提交于 2020-09-25 10:56:27
2018 年 3 月 1 号 Spring Boot 2.0.0.RELEASE 正式发布,这是 Spring Boot 1.0 发布 4 年之后第一次重大修订,因此有多新功能和特性值得关注!在 Spring Boot 官方博客中我们了解到:Spring Boot 2.0 版本经历了 17 个月的开发,有 215 个不同的使用者提供了超过 6800 次的提交。 我们将 Spring Boot 2.0 更新的技术分为三类进行解读: 第一类,基础环境升级; 第二类,默认软件替换和优化; 第三类,新技术的引入。 基础环境升级 最低 JDK 8,支持 JDK 9,不再支持 Java 6 和 7 Spring Boot 2.0 要求 Java 8 作为最低版本,许多现有的 API 已更新,以利用 Java 8 的特性。例如,接口上的默认方法,函数回调以及新的 API,如 javax.time。如果你正在使用 Java 7 或更早版本,则在开发 Spring Boot 2.0 应用程序之前,需要升级你的 JDK。 Spring Boot 2.0 通过测试可以在 JDK 9 下正常运行,同时 Spring Boot 2.0 宣布不再支持 Java 6 和 7,据我了解国内绝大部分互联网公司的基本环境还在 JDK 7 或者 6 环境下运行,考虑升级 Spring Boot 2.0