Spring Security

SpringBoot系列之前后端接口安全技术JWT

痞子三分冷 提交于 2020-08-07 16:39:27
@ 目录 1. 什么是JWT? 2. JWT令牌结构怎么样? 2.1 标头(Header) 2.2 有效载荷(Playload) 2.3 签名(Signature) 3. JWT原理简单介绍 4. JWT的应用场景 5. 与Cookie-Session对比 6. Java的JJWT实现JWT 6.1 什么是JJWT? 6.2 实验环境准备 6.3 jwt配置属性读取 6.4 JWT Token工具类 6.5 Spring Security引入 6.6 JWT授权过滤器 6.7 Spring Security配置类 6.8 自定义登录页面 1. 什么是JWT? JWT 的全称为Json Web Token (JWT),是目前最流行的跨域认证解决方案,是在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),JWT 是一种JSON风格的轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权 引用官方的说法是: JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以进行验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。 引用官网图片,JWT生成的token格式如图: 2.

Spring Boot + Spring Security图形验证码

雨燕双飞 提交于 2020-08-07 15:18:57
引入依赖: <dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> <version>2.5.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>mysql</groupId>

Spring Boot 中三种跨域场景总结

江枫思渺然 提交于 2020-08-07 13:33:32
@[toc] 跨域这个问题松哥之前写过文章,但是最近收到小伙伴们的一些问题,让我发现之前的总结不够全面,因此打算再写一篇文章,来和大家分享一下 Spring Boot 中的跨域问题。 这次我把 Spring Boot 中的跨域问题分为了三个场景: 普通跨域 Spring Security 跨域 OAuth2 跨域 分为三种并非多此一举,主要是因为这三种场景的配置都不太一样,而这三种场景又都是非常常见的场景,所以这里和大家再来专门分享下。 1.什么是跨域 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略。 同源策略是由 Netscape 提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。 同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是 JSONP,JSONP 虽然能解决跨域但是有一个很大的局限性,那就是只支持 GET 请求,不支持其他类型的请求,在 RESTful 时代这几乎就没什么用。 而今天我们说的 CORS(跨域源资源共享)(CORS,Cross-origin resource sharing)是一个 W3C 标准

学习学习SpringSecurity

这一生的挚爱 提交于 2020-08-07 10:01:41
Spring Security 思维导图 简介 SpringSecurity是Spring下的一个安全框架,与shiro 类似,一般用于用户认证(Authentication)和用户授权(Authorization)两个部分,常与与SpringBoot相整合。 初阶 Spring Security 添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 重新部署,会看到一个登陆页面。 密码,翻看日志可以查看到 用户名默认为 user 输入用户名和密码 登录成功 中阶 Security 内存用户名和密码 用户名密码登录 在上面的章节中,添加了Security依赖,直接就出现了登录界面,这次让用户名,密码保存到内存当中 写一个extends WebSecurityConfigurerAdapter的配置类: 配置类内容如下 package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context

Spring Security 常见错误

半世苍凉 提交于 2020-08-07 09:43:43
登陆时提示用户已锁定。User account is locked 由于自定义用户对象实现了UserDetails接口,需要将接口默认方法返回值改为true即可。 public class AuthUserDetails implements UserDetails{} 登陆时提示 Bad credentials 密码匹配失败,失败的原因是由于自定义的UserDetails类重写的方法没有传入密码导致。 @Component public class AuthUserDetails implements UserDetails{ @Override public String getPassword() { // TODO Auto-generated method stub return null; } @Override public String getUsername() { // TODO Auto-generated method stub return null; } ``` **自定义类中的方法一定要返回实际的数据。** 如 getPassword() 方法设置返回用户密码。security内部会获取该密码进行核验。 如果isAccountNonLocked未设置,默认返回flase、则登录时会提示用户已被锁定。 ```java @Override public

跟我学Springboot开发后端管理系统8:Matrxi-Web权限设计实现

荒凉一梦 提交于 2020-08-07 07:23:25
上篇文章讲述了Matrix-web整体实现的权限控制的思路。现在来回顾一下: 首先,用户需要登录,填用户名、密码,后端接收到登录请求,进行用户、密码的校验,校验成功后则根据用户名生成Token,并返回给浏览器。 浏览器收到Token后,会存储在本地的LocalStorge里。 后续浏览器发起请求时都携带该Token,请求达到后端后,会在Filter进行判断,首选判断是否为白名单url(比如登录接口url),如果是则放行;否则进入Token验证。如果有Token且解析成功,则放行,否则,返回无权限访问。 Filter判断后,请求达到具体的Controller层,如果在Controller层上加上了权限判断的注解,则生成代理类。代理类在执行具体方法前会根据Token判断权限。 取出用户的Token并解析得到该请求的userId,根据userId在从存储层获取用户的权限点。权限控制是RBAC这种方式实现的。 获取到用户权限点后,获取权限判断的注解的权限信息,看用户权限点是否包含权限注解的权限信息,如果包含,则权限校验通过,否则则请求返回无权限。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hlz5kP4-1590667445450)(https://ws3.sinaimg.cn/large

Spring Boot+CAS 默认登录页面太丑了,怎么办?

和自甴很熟 提交于 2020-08-07 04:23:39
最近的又一头扎进 Spring Security+CAS 上面了,CAS 单点登录已经连续写了四篇了,小伙伴们一定按顺序阅读哦,这样后面的文章才好理解。 上篇文章 和大家分享了 CAS Server 接入数据库的问题,今天我们来看下如何在 CAS Server 上自定义登录页面,因为正常来说,我们是不会直接用官方给出的登录页面的。 本文是 Spring Security 系列第 26 篇,阅读前面文章有助于更好的理解本文: 挖一个大坑,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 自定义认证逻辑的两种方式(高级玩法)

基于SpringBoot AOP面向切面编程实现Redis分布式锁

霸气de小男生 提交于 2020-08-06 20:27:23
基于SpringBoot AOP面向切面编程实现Redis分布式锁 基于SpringBoot AOP面向切面编程实现Redis分布式锁 基于SpringBoot AOP面向切面编程实现Redis分布式锁 锁定的目标是确保相互排斥其访问的资源。实际上,此资源通常是字符串。使用redis实现锁主要是将资源放入redis中并利用其原子性。当其他线程访问时,如果Redis中已经存在此资源,则不允许进行某些后续操作。 Spring Boot通过RedisTemplate使用Redis,在实际使用过程中,分布式锁可以在封装后在方法级别使用,这样使用起来就更方便了,无需到处获取和释放锁。 首先,定义一个注解: @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited public [@interface](https://my.oschina.net/u/996807) RedisLock { //锁定的资源,redis的键 String value() default "default"; //锁定保持时间(以毫秒为单位) long keepMills() default 30000; //失败时执行的操作 LockFailAction action() default LockFailAction

据说比Spring快44倍的web开发框架,不妨试试

一曲冷凌霜 提交于 2020-08-06 09:07:21
该框架称为:**light-4j **。官方网站简介:A fast, lightweight and more productive microservices framework。很简单,翻译过来就是:一个快速、轻量级和更高效的微服务框架. 为什么叫light-4j?全称应该是:Light for Java,意味着轻量级,并以闪电般的速度来进行 Java 编程. 用这个框架有什么好处? 1. 降低成本 为什么说它能降低成本,因为它速度非常快,占用内存也非常小. 重点来了,它比类似 Spring Boot 这种内嵌 Tomcat 式的主流微服务框架平台要快 44 倍,并且只需要用其 1/5 内存,听起来是不是很牛逼,确实是节约了不少内存空间. 这是一个基准测试报告,与Spring Boot和其他微服务平台进行了比较: 详细报告: https://github.com/networknt/microservices-framework-benchmark 很强大,性能与 Go 语言并肩,并且拥有更低的平均延迟. 这也是与其他Web框架的比较: 详细报告: https://www.techempower.com/benchmarks/#section=data-r15&hw=ph&test=plaintext 2.丰富的功能 具有启动/关闭挂钩和各种中间件的插件架构 分布式OAuth2

SpringBoot集成Spring Security

泄露秘密 提交于 2020-08-06 00:59:53
1、Spring Security介绍 Spring security ,是一个强大的和高度可定制的身份验证和访问控制框架。它是确保基于Spring的应用程序的标准 ——来自官方参考手册 Spring security 和 shiro 一样,具有认证、授权、加密等用于权限管理的功能。和 shiro 不同的是, Spring security 拥有比 shiro 更丰富的功能,并且,对于 Springboot 而言, Spring Security 比 Shiro 更合适一些,因为都是 Spring 家族成员。今天,我们来为 SpringBoot 项目集成 Spring Security 。 本文所使用的版本: ​ SpringBoot : 2.2.6.RELEASE ​ Spring Security : 5.2.2.RELEASE 2、配置Spring Security 在 SpringBoot 中集成 Spring Security 很简单,只需要在pom.xml中添加下面代码就行: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 这里可以不指定 Spring Security