Spring Security

精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用

痴心易碎 提交于 2020-08-11 17:59:21
一、什么是 RestTemplate? RestTemplate 是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。 RestTemplate 作为spring-web项目的一部分,在Spring 3.0版本开始被引入。RestTemplate类通过为HTTP方法(例如GET,POST,PUT,DELETE等)提供重载的方法,提供了一种非常方便的方法访问基于HTTP的Web服务。如果你的Web服务API基于标准的RESTful风格设计,使用效果将更加的完美。 根据Spring官方文档及源码中的介绍,RestTemplate在将来的版本中它可能会被弃用,因为他们已在Spring 5中引入了WebClient作为非阻塞式Reactive HTTP客户端。但是RestTemplate目前在Spring 社区内还是很多项目的“重度依赖”,比如说Spring Cloud。另外,RestTemplate说白了是一个客户端API封装

松哥手把手教你在 SpringBoot 中防御 CSRF 攻击!so easy!

♀尐吖头ヾ 提交于 2020-08-11 16:19:19
CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。 这是一种非常常见的 Web 攻击方式,其实是很好防御的,但是由于经常被很多开发者忽略,进而导致很多网站实际上都存在 CSRF 攻击的安全隐患。 今天松哥就来和大家聊一聊什么是 CSRF 攻击以及 CSRF 攻击该如何防御。 本文是本系列第 18 篇,阅读本系列前面文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中的表单登录 Spring Security 做前后端分离,咱就别做页面跳转了!统统 JSON 交互 Spring Security 中的授权操作原来这么简单 Spring Security 如何将用户数据存入数据库? Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单! Spring Boot + Spring Security 实现自动登录功能 Spring Boot 自动登录,安全风险要怎么控制? 在微服务项目中,Spring Security 比 Shiro 强在哪? SpringSecurity 自定义认证逻辑的两种方式(高级玩法) Spring Security

SpringBoot实现本地存储文件上传及提供HTTP访问服务

和自甴很熟 提交于 2020-08-11 11:22:57
笔者计划为大家介绍分布式文件系统,用于存储应用的图片、word、excel、pdf等文件。在开始介绍分布式文件系统之前,为大家介绍一下使用本机存储来存放文件资源。 二者的核心实现过程是一样的: 上传文件,保存文件(本节是本地磁盘) 返回文件HTTP访问服务路径给前端,进行上传之后的效果展示 一、复习 服务端接收上传的目的是提供文件的访问服务,那么对于SpringBoot而言,有哪些可以提供文件访问的静态资源目录呢? classpath:/META-INF/resources/ , classpath:/static/ , classpath:/public/ , classpath:/resources/ 这是之前我们为大家介绍的内容,从这里看出这里的静态资源都在classpath下。那么就出现问题: 应用的文件资源不能和项目代码分开存储(你见过往github上传代码,还附带项目文件数据的么?) 项目打包困难,当上传的文件越来越多,项目的打包jar越来越大。 代码与文件数据不能分开存储,就意味着文件数据的备份将变得复杂 二、文件上传目录自定义配置 怎么解决上述问题?别忘记了spring boot 为我们提供了 使用 spring.resources.static-locations 配置自定义静态文件的位置。 web: upload-path: D:/data/ spring:

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

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

Spring Boot 中密码加密的两种姿势!

自古美人都是妖i 提交于 2020-08-11 08:51:37
先说一句:密码是无法解密的。大家也不要再问松哥微人事项目中的密码怎么解密了! 密码无法解密,还是为了确保系统安全。今天松哥就来和大家聊一聊,密码要如何处理,才能在最大程度上确保我们的系统安全。 本文是 Spring Security 系列的第 20 篇,阅读本系列前面的文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中的表单登录 Spring Security 做前后端分离,咱就别做页面跳转了!统统 JSON 交互 Spring Security 中的授权操作原来这么简单 Spring Security 如何将用户数据存入数据库? Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单! Spring Boot + Spring Security 实现自动登录功能 Spring Boot 自动登录,安全风险要怎么控制? 在微服务项目中,Spring Security 比 Shiro 强在哪? SpringSecurity 自定义认证逻辑的两种方式(高级玩法) Spring Security 中如何快速查看登录用户 IP 地址等信息? Spring Security 自动踢掉前一个登录用户

恕我直言你可能真的不会java第1篇:lambda表达式会用了么?

感情迁移 提交于 2020-08-11 01:15:36
本文配套教学视频: B站观看地址 在本号之前写过的一些文章中,笔者使用了lambda表达式语法,一些读者反映说代码看不懂。本以为java 13都已经出了,java 8中最重要特性lambda表达式大家应该都掌握了,实际上还是存在大量的程序员没有使用java8,还有的使用了java8也不会使用lambda表达式。 Lambda表达式是Java 8最流行最常用的功能特性。它将函数式编程概念引入Java,函数式编程的好处在于可以帮助我们节省大量的代码,非常方便易用,能够大幅度的提高我们的编码效率。在本文中,我们将介绍lambda表达式是什么,并将传统的java代码写法转换为lambda表达式写法,大家可以通过示例了解lambda表达式都对传统代码做了哪些简化。 本文配套教学视频: B站观看地址 一、接口定义 首先,我们要明白lambda表达式在表达什么?答案就是lambda表达式表达接口函数的实现,所以我们有必要做一下准备工作。在传统的开发方式下,我们不习惯将代码块传递给函数。我们所有的行为定义代码都封装在方法体内,并通过对象引用执行,就像使用下面的代码一样: public class LambdaDemo { //函数定义 public void printSomething(String something) { System.out.println(something); } /

Spring框架基础

佐手、 提交于 2020-08-11 01:09:12
一.Spring框架基础 Spring:春天;轻量级的企业级开发框架,核心是IOC(控制反转)和AOP(面向切面编程)。 官网:spring.io Spring-->Spring MVC -->MyBatis-->Spring Boot-->SpringCloud-->Spring Security Spring的历史,我们来百度一下,一块看下,不再录屏。 Spring Framework创始人,著名作者。 Rod在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位。更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位。 Spring从2002年开始出来,到现在是Spring 5.0了,快火了20年了,证明这个框架有其独特之处、有其过人之处。 1.1 Spring作用 MVC设计模式挺好,但是有很多问题,主要问题就是高耦合,在controller(Servlet)里面有对于业务层对象的耦合,在业务层里面有对于dao层对象的耦合,在BaseDao里面,有数据库连接的耦合。 框架前奏,我们做的这些耦合的解耦。这些解耦是我们自己完成的,也就是说我们不用框架,也可以来实现解耦。 框架就是比较成熟的解耦半成品程序,可以让程序员在这个框架的基础上实现良好的,“高内聚、低耦合”的程序,实现面向对象的“高可用、健壮性、可复用”。 Spring功能作业,程序解耦。 1.2 Spring

Spring Security 实战干货:如何实现不同的接口不同的安全策略

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-10 21:05:01
1. 前言 欢迎阅读 Spring Security 实战干货 系列文章 。最近有开发小伙伴提了一个有趣的问题。他正在做一个项目,涉及两种风格,一种是给小程序出接口,安全上使用无状态的 JWT Token ;另一种是管理后台使用的是 Freemarker ,也就是前后端不分离的 Session 机制。用 Spring Security 该怎么办? 2. 解决方案 我们可以通过多次继承 WebSecurityConfigurerAdapter 构建多个 HttpSecurity 。 HttpSecurity 对象会告诉我们如何验证用户的身份,如何进行访问控制,采取的何种策略等等。 如果你看过之前的教程,我们是这么配置的: /** * 单策略配置 * * @author felord.cn * @see org.springframework.boot.autoconfigure.security.servlet.SpringBootWebSecurityConfiguration * @since 14 :58 2019/10/15 */ @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true, securedEnabled = true)

GitHub 星标 17K,超火的SpringBoot +Vue实战项目,贼全文档视频

旧时模样 提交于 2020-08-10 07:29:51
项目摘要 vhr 是一个基于 SpringBoot+Vue 技术栈开发的前后端分离项目,项目使用 SpringBoot2.1.8 来开发,集成了当前企业级开发中众多的热门技术点,如消息中间件、Redis 缓存、SpringBoot+Vue+ElementUI 技术栈等等。 技术选型 核心框架:SpringBoot2.1.8 安全管理:Spring Security 持久层框架:MyBatis 缓存:Redis 数据库:MySQL8 消息队列:RabbitMQ 即时通信:WebSocket 文件存储:FastDFS 前端框架:Vue+ElementUI+Vuex 前端网络请求:axios 技术要点 基于 Spring Security 搭建动态权限管理系统。 前端 Vue 采用动态路由,千人千面。 结合 RabbitMQ 搭建独立的邮件服务器。 基于 WebSocket 实现在线聊天功能。 Redis 做缓存并协助处理消息幂等性问题。 采用 FastDFS 做文件存储系统。 ... 开发文档 作者为这个项目已经写了五十余篇开发文档,详细记录了项目的发开历程,从数据库设计到业务功能实现,都做了详细介绍, 文档足足有 141 页 ,我截一部分图给大家参考下: 另外,为了方便大家学习,文档还提供了在线网站版: 这个文档目前还在不断更新中。所有这一切,只为了大家能够快速掌握这个项目。

恕我直言你可能真的不会java第9篇-Stream元素的匹配与查找

你离开我真会死。 提交于 2020-08-10 05:46:43
在我们对数组或者集合类进行操作的时候,经常会遇到这样的需求,比如: 是否包含某一个“匹配规则”的元素 是否所有的元素都符合某一个“匹配规则” 是否所有元素都不符合某一个“匹配规则” 查找第一个符合“匹配规则”的元素 查找任意一个符合“匹配规则”的元素 这些需求如果用for循环去写的话,还是比较麻烦的,需要使用到for循环和break!本节就介绍一个如何用Stream API来实现“查找与匹配”。 一、对比一下有多简单 employees是10个员工对象组成的List,在前面的章节中我们已经用过多次,这里不再列出代码。 如果我们不用Stream API实现,查找员工列表中是否包含年龄大于70的员工?代码如下: boolean isExistAgeThan70 = false; for(Employee employee:employees){ if(employee.getAge() > 70){ isExistAgeThan70 = true; break; } } 如果我们使用Stream API就是下面的一行代码,其中使用到了我们之前学过的"谓词逻辑"。 boolean isExistAgeThan70 = employees.stream().anyMatch(Employee.ageGreaterThan70); 将谓词逻辑换成lambda表达式也可以,代码如下: