Spring Security

Spring Cloud 学习 (九) Spring Security, OAuth2

喜你入骨 提交于 2020-05-08 19:43:32
Spring Security Spring Security 是 Spring Resource 社区的一个安全组件。在安全方面,有两个主要的领域,一是“认证”,即你是谁;二是“授权”,即你拥有什么权限,Spring Security 的主要目标就是在这两个领域 Spring OAuth2 OAuth2 是一个标准的授权协议,允许不同的客户端通过认证和授权的形式来访问被其保护起来的资源 OAuth2 协议在 Spring Resource 中的实现为 Spring OAuth2,Spring OAuth2 分为:OAuth2 Provider 和 OAuth2 Client OAuth2 Provider OAuth2 Provider 负责公开被 OAuth2 保护起来的资源 OAuth2 Provider 需要配置代表用户的 OAuth2 客户端信息,被用户允许的客户端就可以访问被 0Auth2 保护的资源。OAuth2 Provider 通过管理和验证 OAuth2 令牌来控制客户端是否有权限访问被其保护的资源 另外,OAuth2 Provider 还必须为用户提供认证 API 接口。根据认证 API 接口,用户提供账号和密码等信息,来确认客户端是否可以被 OAuth2 Provider 授权。这样做的好处就是第三方客户端不需要获取用户的账号和密码

Spring Boot Security

徘徊边缘 提交于 2020-05-08 19:41:59
如图,是一种通用的用户权限模型。一般情况下会有5张表,分别是:用户表,角色表,权限表,用户角色关系表,角色权限对应表。 一般,资源分配时是基于角色的(即,资源访问权限赋给角色,用户通过角色进而拥有权限);而访问资源的时候是基于资源权限去进行授权判断的。 Spring Security和Apache Shiro是两个应用比较多的权限管理框架。Spring Security依赖Spring,其功能强大,相对于Shiro而言学习难度稍大一些。 Spring的强大是不言而喻的,可扩展性也很强,强大到用Spring家族的产品只要按照其推荐的做法来就非常非常简单,否则,自己去整合过程可能会很痛苦。 目前,我们项目是基于Spring Boot的,而且Spring Boot的权限管理也是推荐使用Spring Security的,所以再难也是要学习的。 Spring Security简介 Spring Security致力于为Java应用提供认证和授权管理。它是一个强大的,高度自定义的认证和访问控制框架。 具体介绍参见https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle/ 这句话包括两个关键词: Authentication(认证) 和 Authorization(授权,也叫访问控制)

Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?

风格不统一 提交于 2020-05-08 09:55:21
上篇文章 中,我们讲了在 Spring Security 中如何踢掉前一个登录用户,或者禁止用户二次登录,通过一个简单的案例,实现了我们想要的效果。 但是有一个不太完美的地方,就是我们的用户是配置在内存中的用户,我们没有将用户放到数据库中去。正常情况下,松哥在 Spring Security 系列中讲的其他配置,大家只需要参考 Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单! 一文,将数据切换为数据库中的数据即可。 但是,在做 Spring Security 的 session 并发处理时,直接将内存中的用户切换为数据库中的用户会有问题,今天我们就来说说这个问题,顺便把这个功能应用到微人事中( https://github.com/lenve/vhr )。 本文是松哥最近在连载的 Spring Security 系列第 14 篇,阅读本系列前面的文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密码怎么解密了 手把手教你定制 Spring Security 中的表单登录 Spring Security 做前后端分离,咱就别做页面跳转了!统统 JSON 交互 Spring Security 中的授权操作原来这么简单 Spring Security

spring security简单教程以及实现完全前后端分离

一世执手 提交于 2020-05-08 08:01:40
spring security是spring家族的一个安全框架,入门简单。对比shiro,它自带登录页面,自动完成登录操作。权限过滤时支持http方法过滤。 在新手入门使用时,只需要简单的配置,即可实现登录以及权限的管理,无需自己写功能逻辑代码。 但是对于现在大部分前后端分离的web程序,尤其是前端普遍使用ajax请求时,spring security自带的登录系统就有一些不满足需求了。 因为spring security有自己默认的登录页,自己默认的登录控制器。而登录成功或失败,都会返回一个302跳转。登录成功跳转到主页,失败跳转到登录页。如果未认证直接访问也会跳转到登录页。但是如果前端使用ajax请求,ajax是无法处理302请求的。前后端分离web中,规范是使用json交互。我们希望登录成功或者失败都会返回一个json。况且spring security自带的登录页太丑了,我们还是需要使用自己的。 spring security一般简单使用: web的安全控制一般分为两个部分,一个是认证,一个是授权。 认证管理: 就是认证是否为合法用户,简单的说是登录。一般为匹对用户名和密码,即认证成功。 在spring security认证中,我们需要注意的是:哪个类表示用户?哪个属性表示用户名?哪个属性表示密码?怎么通过用户名取到对应的用户?密码的验证方式是什么? 只要告诉spring

spring security进阶 使用数据库中的账户和密码认证

跟風遠走 提交于 2020-05-07 19:11:35
spring security 使用数据库中的账户和密码认证 [TOC] 示例工程地址 一、原理分析 前台的登录请求发送到后端后会由spring security进行拦截,即controller层由框架自己提供。这样用户名和密码的认证就需要在service层完成,所以框架需要在service层获取到我们自己的数据库账号信息。 spring security 提供了一个接口 **UserDetailsService **来让用户提供账号和密码,其内容如下 public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; } 用户实现这个接口中的loadUserByUsername方法,通过数据库中查询的账号和密码构造一个UserDetails对象返回给spring security,然后框架自己完成认证操作。 其中UserDetails也是一个接口,spring security用它来封装当前进行认证的用户信息 public interface UserDetails extends Serializable { Collection<? extends GrantedAuthority>

Spring Security(五) —— 动手实现一个 IP_Login

你。 提交于 2020-05-07 18:42:06
摘要: 原创出处 https://www.cnkirito.moe/spring-security-5/ 「老徐」欢迎转载,保留摘要,谢谢! 5 动手实现一个IP_Login 在开始这篇文章之前,我们似乎应该思考下为什么需要搞清楚Spring Security的内部工作原理?按照第二篇文章中的配置,一个简单的表单认证不就达成了吗?更有甚者,为什么我们不自己写一个表单认证,用过滤器即可完成,大费周章引入Spring Security,看起来也并没有方便多少。对的,在引入Spring Security之前,我们得首先想到,是什么需求让我们引入了Spring Security,以及为什么是Spring Security,而不是shiro等等其他安全框架。我的理解是有如下几点: 1 在前文的介绍中,Spring Security支持防止csrf攻击,session-fixation protection,支持表单认证,basic认证,rememberMe…等等一些特性,有很多是开箱即用的功能,而大多特性都可以通过配置灵活的变更,这是它的强大之处。 2 Spring Security的兄弟的项目Spring Security SSO,OAuth2等支持了多种协议,而这些都是基于Spring Security的,方便了项目的扩展。 3 SpringBoot的支持,更加保证了Spring

Re:从零开始的Spring Session(三)

蓝咒 提交于 2020-05-07 17:39:35
上一篇文章中,我们使用Redis集成了Spring Session。大多数的配置都是Spring Boot帮我们自动配置的,这一节我们介绍一点Spring Session较为高级的特性。 集成Spring Security 之所以把Spring Session和Spring Security放在一起讨论,是因为我们的应用在集成Spring Security之后,用户相关的认证与Session密不可分,如果不注意一些细节,会引发意想不到的问题。 与Spring Session相关的依赖可以参考上一篇文章,这里给出增量的依赖: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </ artifactId > </ dependency > 我们引入依赖后,就已经自动配置了Spring Security,我们在application.yml添加一个内存中的用户: security: user: name: admin password: admin 测试登录点沿用上一篇文章的端点,访问 http://localhost:8080/test/cookie?browser=chrome 端点后会出现http basic的认证框

SpringBoot+Vue+ElementUI实现含国际化的前后端不分离的传统简易管理系统搭建(一)

谁都会走 提交于 2020-05-05 19:17:11
本项目在GitHub上可以下载源代码,欢迎大家指点。谢谢 GitHub地址: 点击进入 开发IED使用IntelliJ IDEA 目前仅仅在架构运用层解析框架如何使用,后续在此项目完结后会剖析所用到的所有架构的底层原理技术,额,比较倾向于,先学会简单使用,再剖析其底层原理的学习模式。 文章目录 1 项目构建 2 SpringBoot整合SpringSecurity 3.SpringBoot整合Mybatis 4 Resolver整合 1 项目构建 新建一个maven项目,这里就不多说了,给大家看下我这边项目的结构: config:主要存放配置文件资源,我这里目前比较简单,就一个application.properties,当然也可以是推荐的springboot推荐的application.yml i18n:主要存放国际化语言文件,这里需要在application.properties中指定其文件路径和位置 即: # i18n spring.messages.encoding = utf-8 spring.messages.basename = i18n/index META-INF:目前可不需要,我这里是想要以后可能会写一些jsp文件,所以在这里也支持下,配置的jsp文件就会在这里文件夹中 views主要是前端代码了,比如html、js等等 我们先来看后端 首先是pom

Spring Cloud进阶之路 | 八:授权服务(Spring Cloud Oauth2)

元气小坏坏 提交于 2020-05-04 17:11:10
​转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12201382.html oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。 OAuth 2 定义了四种 Grant Type,授权码模式(authorization code)、简化模式(implicit)、密码模式(Password)、客户端模式(client credentials),每一种都有适用的应用场景。 运行流程如下所示: ​ 至于每种模式如何运行,需要什么参数,本文不再赘述,大家可自行查阅相关资料,做到烂熟于心。 微服务安全策略 在传统单体Web应用架构中,身份认证从来都不是问题,通过Spring Security或者Shiro,配合session,可以很方便的解决身份认证和鉴权的问题。 随着不断扩大的业务需求,在传统单体架构捉襟见肘的时候,分布式架构应运而生, 分布式架构强调的是服务化以及服务的分散化, 大大地提升了系统的可靠性和响应速度。 可是,技术并没有因此而停滞不前,微服务架构又出现了。 微服务架构更强调服务的专业化、精细化, 更加强调单一职责、轻量级通信(HTTP)、独立性并且进程隔离。 随着应用架构的改变

超实用的 Nginx 极简教程,覆盖了常用场景(转)

橙三吉。 提交于 2020-05-04 03:02:11
概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 概述 什么是 Nginx? Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 什么是反向代理? 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 安装与使用 安装 详细安装方法请参考:Nginx 安装 使用 nginx 的使用比较简单,就是几条命令。 常用到的命令如下: nginx - s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。 nginx - s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。 nginx - s reload 因改变了Nginx相关配置,需要重新加载配置而重载。 nginx - s reopen 重新打开日志文件。 nginx - c filename 为 Nginx 指定一个配置文件,来代替缺省的。 nginx - t 不运行