Spring Security

写了这么多年代码,这样的登录方式还是头一回见!

匆匆过客 提交于 2020-11-03 07:20:28
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里--> Spring Boot+Vue+微人事视频教程 Spring Security 系列还没搞完,最近还在研究。 有的时候我不禁想,如果从 Spring Security 诞生的第一天开始,我们就一直在追踪它,那么今天再去看它的源码一定很简单,因为我们了解到每一行代码的缘由。 然而事实上我们大部分人都是中途接触到它的,包括松哥自己。所以在阅读源码的时候,有时候会遇到一些不是那么容易理解的东西,并不是说这个有多难,只是我们不了解 N 年前的开发环境,因此也就不容易理解某一行代码出现的意义。 所以为了搞透彻这个框架,有时候我们还得去了解之前发生了什么。 这就跟学 Spring Boot 一样,很多小伙伴问要不要跳过 SSM ,我说不要,甚至还专门写了一篇文章( Spring Boot 要怎么学?要学哪些东西?要不要先学 SSM? ),跳过了 SSM ,Spring Boot 中的很多东西就无法真正理解。 扯远了。。。 Spring Security 中对 HttpServletRequest 请求进行了封装,重写了 HttpServletRequest 中的几个和安全管理相关的方法,想要理解 Spring Security 中的重写,就要先从 HttpServletRequest 开始看起。 有小伙伴可能会说

技术精进的三境界

梦想与她 提交于 2020-11-01 06:28:03
最近更新了一篇 Docker 的文章,朋友跟我反馈说效果并不是很好,我回头看了下,的确没有我自己的特色,没有太多思考,让公众号显得有些「百货」了。经过反思,今后只在个人博客更新 Docker 相关的个人学习经验( 传送门 ),个人公众号还是主要推送和 Java 结合较为紧密的内容。 前言 前不久公众号后台有人给我留言,请教如何体系地学习 Java 知识,我当时心想:这话题太大,Java 技术栈也太深,不是一篇文章能说清楚的,但要说学习技巧,却的确是有规律所寻,秉持着「授人以鱼不如授人以渔」的想法,这篇文章便分享下我个人的一些学习技巧。 王国维在《人间词话》中提到了古今之成大事业、大学问者,必经的三种境界: “昨夜西风凋碧树,独上高楼,望尽天涯路。” 此第一境也。 “ 衣带渐宽终不悔,为伊消得人憔悴。” 此第二境也。 “ 众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”此第三境也。我也按照我的理解,将精进技术分成了三个境界。 第一境:从 overview 和 guides 获取新知识的直观感受 善用搜索,推荐 google。google 第一页搜索出来权威内容的概率要大于 baidu,人很容易有先入为主的观念,前五篇文章对一个知识点的直观感受,就会形成固化映像。( 技术精进的第一层关卡:你可能缺少一个梯子 ) 以一个可能大多数读者都觉得陌生的知识点:图形数据库 Neo4j 作为引子

Spring Boot 2.0 新特性

旧街凉风 提交于 2020-10-29 21:00:46
这是一篇总结文章,主要收集 Spring Boot 2.0 相对于 Spring Boot 1.x 的新特性,本章节并不提供实践性质的源代码。在 Spring Boot 系列文章中会持续退出实践章节。 从 Spring Boot 1.5 开始升级 如果要从 Spring Boot 1.5 升级到 Spring Boot 2.0 可能要花费一些实际,可以参考 官方迁移指南 , 中文版本迁移指南 如果是更老的版本,请参考 Upgrading from Spring Boot 1.4 迁移指南 当然,你可以从谷歌或百度搜索到中文翻译版本。 本文主要来源于 spring-boot-2.0-release-notes 基于 Java 8 支持 Java 9 Spring Boot 2.0 要求 Java 的最低版本是 Java 8,从 Spring Boot 2.0 版本开始许多 APIs 使用了 Java 8 的特性。当然你也可以选择 Java 9。 Spring Boot 2.0 不在支持 Java 6 和 Java 7。 第三方依赖库 首先 Spring Boot 2.0 是基于 Spring 5 的。那么所有的 Spring 5 的新特性 在 Spring Boot 2.0 中都有体现。 其中主要的依赖变更包括 Tomcat 8.5 Flyway 5 Hibernate 5.2

Spring Boot 中三种跨域场景总结

随声附和 提交于 2020-10-29 14:10:45
1、什么是跨域 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略。 同源策略是由 Netscape 提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。 同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是 JSONP,JSONP 虽然能解决跨域但是有一个很大的局限性,那就是只支持 GET 请求,不支持其他类型的请求,在 RESTful 时代这几乎就没什么用。 而今天我们说的 CORS(跨域源资源共享)(CORS,Cross-origin resource sharing)是一个 W3C 标准,它是一份浏览器技术的规范,提供了 Web 服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略,这是 JSONP 模式的现代版。 在 Spring 框架中,对于 CORS 也提供了相应的解决方案,在 Spring Boot 中,这一方案得倒了简化,无论是单纯的跨域,还是结合 Spring Security 之后的跨域,都变得非常容易了。 2、解决方案 首先创建两个普通的 Spring Boot 项目,这个就不用我多说,第一个命名为

Springboot集成SpringSecurity

人盡茶涼 提交于 2020-10-28 17:38:17
点击上方 蓝色字体 ,选择“标星公众号” 优质文章,第一时间送达 作者 | cainame 来源 | urlify.cn/7Jn6jm 66套java从入门到精通实战课程分享 一、Spring security 是什么? Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。 它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。 二、Spring security 怎么使用? 使用Spring Security很简单,只要在pom.xml文件中,引入spring security的依赖就可以了。 <!-- spring security依赖 --> < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </ artifactId > </ dependency > 什么都不做,直接运行程序

还在从零开始搭建项目?手写了款快速开发脚手架

不羁岁月 提交于 2020-10-27 00:54:54
之前开源了一款项目骨架mall-tiny,完整继承了mall项目的整个技术栈。总感觉mall-tiny集成了太多中间件,过于复杂了。这次对其进行了简化和升级,使它成为了一款拥有完整权限管理功能的快速开发脚手架,希望对大家有所帮助! 简介 mall-tiny 是一款基于SpringBoot+MyBatis-Plus的快速开发脚手架,拥有完整的权限管理功能,可对接Vue前端,开箱即用。 项目演示 mall-tiny 项目可无缝对接 mall-admin-web 前端项目,秒变权限管理系统。 技术选型 数据库表结构 化繁为简,仅保留了权限管理功能相关的9张表,方便自由定制; 使用流程 环境搭建 简化依赖服务,只需安装最常用的MySql和Redis服务即可,数据库中需要导入 mall_tiny.sql 脚本。 开发规约 项目包结构 src ├── common -- 用于存放通用代码 | ├── api -- 通用结果集封装类 | ├── config -- 通用配置类 | ├── domain -- 通用封装对象 | ├── exception -- 全局异常处理相关类 | └── service -- 通用业务类 ├── config -- SpringBoot中的Java配置 ├── domain -- 共用封装对象 ├── generator -- MyBatis

Springboot 整合 flowable modeler 免登录 查询用户 用户组

断了今生、忘了曾经 提交于 2020-10-26 05:13:01
之前画流程图都是用tomcat启动flowable modeler,但是这样启动就不能在分配任务用户/用户组的时候查询自己系统里的数据。所以现在需要把flowable modeler集成到项目里来。 之前自己也搜索了很多文章,都感觉不是很清晰,可能也是因为我刚接触不久。现在自己集成好了之后,记录一下自己学习的结果。 首先需要创建一个springboot应用,pom文件中引入相关jar包: <properties> <java.version>1.8</java.version> <flowable.version>6.4.1</flowable.version> <lombok.version>1.18.0</lombok.version> <fastjson.version>1.2.9</fastjson.version> </properties> < dependencyManagement > < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-dependencies </ artifactId > < type > pom </ type > < scope > import </ scope > </

什么是DevOps?该如何正确的在企业内进行实践

时光毁灭记忆、已成空白 提交于 2020-10-25 09:45:37
传统IT技术团队中通常都有多个独立的组织-开发团队、测试团队和运维团队。开发团队进行软件开发、测试团队进行软件测试,运维团队致力于部署,负载平衡和发布管理。 他们之间的职能有时重叠、有时依赖、有时候会冲突。 因为衔接与沟通问题,有时会导致开发-测试-发布的周期太长了,特别是对于互联网公司,时间就是生命。从而需要建立一支由开发,质量保证和运营组成的混合专业知识的团队的需求,并引入了DevOps来弥合团队之间的鸿沟,帮助他们快速而可靠地操作和开发应用程序。 一、什么是DevOps? 顾名思义,Devops是“开发”与“运维”的缩写。它定义了一组流程,这些流程通过在开发和运维团队之间进行协作带来组织文化上的转变。它包含四个关键组件:协作,实践,文化和工具。 二、为什么我们需要DevOps? DevOps带来更高水平的协作和速度,使组织提高生产力,降低运营成本以有效地为客户提供服务并保持市场竞争力。它还有助于更快地发布产品,管理计划外的工作,更快地捕获和解决关键问题。 三、DevOps实践 独立devops团队 DevOps使用各种工具,例如docker、k8s、Jenkins,Terraform,Nagios,Grafana,Prometheus或Splunk等,组织应建立一个集中部门来创建和操作这些工具。这个集中管理部门负责开发团队中的敏捷实践设置,该团队将研究新的工具并坚持使用

总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇

一世执手 提交于 2020-10-24 21:27:49
本文是Java IO总结系列篇的第4篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇 如果您阅读完成,觉得此文对您有帮助,请给我点个赞,您的支持是我不竭的创作动力。 为了方便大家理解,我特意制作了本文对应的视频: 总结删除文件或者文件夹的7种方法 一、删除文件或文件夹的四种基础方法 下面的四个方法都可以删除文件或文件夹,它们的共同点是: 当文件夹中包含子文件的时候都会删除失败,也就是说这四个方法只能删除空文件夹 。 需要注意的是:传统IO中的File类和NIO中的Path类既可以代表文件,也可以代表文件夹。 File类的delete() File类的deleteOnExit() Files.delete(Path path) Files.deleteIfExists(Path path); 它们之间的差异: 成功的返回值 是否能判别文件夹不存在导致失败 是否能判别文件夹不为空导致失败 备注 File类的delete() true 不能(返回false) 不能(返回false) 传统IO File类的deleteOnExit() void 不能,但不存在就不会去执行删除 不能(返回void)

被我用烂的DEBUG调试技巧,专治各种搜索不到的问题

情到浓时终转凉″ 提交于 2020-10-24 06:55:47
在开发过程中,遇到问题,我们经常会使用搜索引擎来查找问题的解决方案,然后予以解决。但是有些问题一时半会搜索不到解决方案,需要自己去解决。这里分享下我解决这些问题使用的调试技巧,给大家一个解决问题的新思路! 问题描述 在 《我扒了半天源码,终于找到了Oauth2自定义处理结果的最佳方案!》 一文中,当JWT令牌过期或者签名不正确时,我们想要自定义网关认证失败的返回结果。这个问题解决起来很简单,只需修改一行代码即可。但是当时查找解决方案确实花费了一番功夫,通过DEBUG源码才找到了Spring Security中提供的自定义配置,解决了该问题。下面讲讲我是如何通过DEBUG源码找到这个解决方案的! 解决过程 首先我们需要找到一个切入点,既然问题是由于JWT令牌过期或者签名不正确才产生的,我们很容易想到RSASSAVerifier这个关键类,它的verify()方法是用来验证签名是否正确的,我们可以在该方法上面打个断点DEBUG一下,发现程序执行过程果然会经过这里,要是签名不正确会直接返回false; 这时候我们可以查下堆栈信息,了解下这次调用的整个过程,可以看到红框以下的调用都是WebFlux里面的调用,没有参考意义,所以调用最早是从NimbusReactiveJwtDecoder类开始的; 我们搜索下NimbusReactiveJwtDecoder在哪里被使用到了