spring-boot-security学习
文章平均质量分 91
spring-boot-security学习
郭艺宾
富有激情的学习Java
展开
-
SpringBootSecurity学习(26)前后端分离版之github单点登录
单点登录(SSO)关于oauth2.0,最后我们再来学习一下单点登录。前面介绍过单点登录的定义,单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。关于单点登录,springcloud G版本的官方文档地址如下:https://cloud.spring.io...原创 2019-10-23 19:22:44 · 1711 阅读 · 3 评论 -
SpringBootSecurity学习(25)前后端分离版之OAuth2.0 令牌中继
增加Eureka前面介绍的项目都是授权服务和资源服务单独两个,这样在资源服务中的 check_token 地址都是写死的地址 :下面我们把eureka加上,这样就可以直接用服务名了。eureka服务的搭建不再讨论,在服务中加eureka只需要改两个地方,就是加依赖和修改配置:增加配置如下:然后就可以把资源服务中的固定ip改为服务名:增加令牌中继从授权服务获取令牌以后,直接访问...原创 2019-10-16 20:08:31 · 1095 阅读 · 0 评论 -
SpringBootSecurity学习(24)前后端分离版之OAuth2.0 应用登记
应用登记一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求。举个例子,下面是github的登记页面:https://github.com/settings/applications/new下面我们来自己做一个简单的应用登记,根据表 oauthclientdetails 的结构,我们登记的时候只填写应用名称和回调地址即可,其它的字段如下:client_id...原创 2019-10-15 19:03:44 · 1309 阅读 · 0 评论 -
SpringBootSecurity学习(23)前后端分离版之OAuth2.0 其它模式
密码模式前面介绍了授权码模式和刷新令牌两种获取最新令牌的方法,下面来看一下其它模式。首先看密码模式,我们默认配置的三种模式中其实就包含密码模式的支持:因此我们启动项目,直接使用密码模式即可,访问地址是:http://ip:port/oauth/token参数有五个,分别是:grant_type:密码模式值必须为 passwordusername:用户名password:密...原创 2019-10-15 11:33:55 · 1328 阅读 · 0 评论 -
SpringBootSecurity学习(22)前后端分离版之OAuth2.0自定义授权码
使用JDBC维护授权码前面的代码中,测试流程第一步都是获取授权码,然后再携带授权码去申请令牌,授权码示例如下:产生的授权码默认是 6 位的,产生以后并没有做任何管理,可以说是一个临时性的授权码,oauth2也提供了将授权码使用jdbc进行管理的功能,首先在数据库中创建表 oauth_code :code:存储服务端系统生成的code的值(未加密)authentication:存储将A...原创 2019-10-14 20:19:38 · 5485 阅读 · 1 评论 -
SpringBootSecurity学习(21)前后端分离版之OAuth2.0非对称加密
JWT转换器前面的例子中,都是在授权服务配置类中配置了一个很简单的jwt转换器,如下:可以看到我们只用setSigningKey方法配置了一个秘钥,这里使用的是简单的对称加密的方式来加密jwt内容,同时资源服务器中使用的也是同样的秘钥配置jwt转换器:除了对称加密的方式,生产环境使用非常多的是更加安全的非对称加密的方式来加密jwt。生成公私钥公私钥对可以使用jdk的命令 keyto...原创 2019-10-12 15:48:20 · 2558 阅读 · 2 评论 -
SpringBootSecurity学习(20)前后端分离版之OAuth2.0刷新token
刷新token前面的例子和配置都是从头开始申请授权码和令牌,现在来看一下如何根据获取令牌时,回参中的 refresh_token 来刷新令牌。现在在项目中配置的是内存模式的默认用户名密码,第一步先改成数据库查询的方式,具体过程参考前面的文章即可,来看security配置类:然后修改授权服务配置类,在 endpoints 中配置userDetailsService:修改成数据库方式也是为了...原创 2019-10-11 20:39:19 · 2442 阅读 · 1 评论 -
SpringBootSecurity学习(19)前后端分离版之OAuth2.0 token的存储和管理
内存中存储token我们来继续授权服务代码的下一个优化。现在授权服务中,token的存储是存储在内存中的,我们使用的是 InMemoryTokenStore :图中的tokenStore方法支持很多种令牌的存储方式,来看一下:InMemoryTokenStore:这个版本的实现是被默认采用的,它可以完美的工作在单服务器上(即访问并发量压力不大的情况下,并且它在失败的时候不会进行备份),大...原创 2019-10-11 16:30:25 · 3424 阅读 · 3 评论 -
SpringBootSecurity学习(18)前后端分离版之 OAuth2.0 数据库(MyBatis)存储客户端
使用Mybatis查询客户端信息前面的例子使用了默认的jdbc配置来动态从数据库查询客户端信息,下面来改用更加灵活的mybatis来实现,改用mybatis,首先pom中换成mybatis的依赖:然后新建一个实体类,并实现查询需要的 ClientDetails 接口:由于接口默认需要实现的方法有很多返回类型为集合类型的,所以这里的部分get方法做一些调整,例如:其它的可以自行下载源代...原创 2019-10-09 20:42:58 · 873 阅读 · 0 评论 -
SpringBootSecurity学习(17)前后端分离版之 OAuth2.0 数据库(JDBC)存储客户端
自动批准授权码前面我们授权的流程中,第一步获取授权码的时候,都会经历一个授权是否同意页面:这个流程就像第三方登录成功后,提问是否允许获取昵称和头像信息的页面一样,这个过程其实是可以自动同意的,需要在客户端配置中,增加一个自动批准:这样我们申请授权码直接就可以得到:在流程需要自动完成的时候,需要这样配置,如果需要用户点击同意,那么这里需要设置为false,不写默认也是false。客...原创 2019-10-09 15:29:46 · 1545 阅读 · 0 评论 -
SpringBootSecurity学习(16)前后端分离版之 OAuth2.0 加密配置
示例代码的改进前面使用spring cloud security和spring cloud oauth2写了一个第三方授权的例子,例子非常的简单,主要目的是用来熟悉OAuth2.0 申请授权的整个流程,这个简单的示例肯定是不能直接用于生产环境的,还有很多需要改进的地方,我们来总结一下:1、只演示了授权码的形式,其它的三种(隐藏式,密码式,客户端凭证)并没有熟悉2、密码和秘钥是未加密的3...原创 2019-10-08 20:06:16 · 2322 阅读 · 0 评论 -
SpringBootSecurity学习(15)前后端分离版之 OAuth2.0简单示例
OAuth2.0OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。客户端来申请资源,资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。也就是说,OAuth 的核心就是向第三方应用颁发令牌。而且,OAuth 2.0 规定了四种获得令牌的流程。你可以选择最适合自己的那一种,向第三方应用颁发令牌。具体的OAuth学习建议仔细研读阮一峰的教程,...原创 2019-10-07 22:35:55 · 2149 阅读 · 3 评论 -
SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍
登录总结前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了。security本身已经实现的比较完善的安全处理,加上JWT的验证方式,可以实现一个理想的登录功能。我们来看登录,给用户一个账号,验证有效后登录成功,这一步是任何系统都无法避免的。无论这个账号只能登录一个系统还是...原创 2019-10-06 10:12:36 · 2072 阅读 · 0 评论 -
SpringBootSecurity学习(13)前后端分离版之JWT
JWT 使用前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能。但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和cookie来维护登录状态,这种方法的问题在于,扩展性不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。一种解...原创 2019-10-04 15:34:57 · 1685 阅读 · 0 评论 -
SpringBootSecurity学习(12)前后端分离版之简单登录
前后端分离前面讨论了springboot下security很多常用的功能,其它的功能建议参考官方文档学习。网页版登录的形式现在已经不是最流行的了,最流行的是前后端分离的登录方式,前端单独成为一个项目,与后台的交互,包括登录认证和授权都是由异步接口来实现。在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种...原创 2019-10-02 13:08:02 · 5562 阅读 · 2 评论 -
SpringBootSecurity学习(11)网页版登录之URL动态权限
动态权限前面讨论用户登录认证的时候,根据用户名查询用户会将用户拥有的角色一起查询出来,自动实现判断当前登录用户拥有哪些角色。可以说用户与角色之间的动态配置和判断security做的非常不错。不过在配置方法级别的权限的时候,使用注解虽然是一种比较优雅的方式,但是要求在开发的时候就知道当前url对应哪些角色,无法实现动态的配置,而实际的项目中,每个链接允许哪些角色访问也不是一成不变的,因此下面我们来...原创 2019-10-02 10:01:52 · 1525 阅读 · 0 评论 -
SpringBootSecurity学习(10)网页版登录之记住我功能
场景很多登录都有记住我这个功能,在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统。记住用户功能的基本原理如下图:用户登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeService,会生成一个token,将token写入到浏览器cookie,同时Re...原创 2019-10-01 15:24:12 · 1611 阅读 · 0 评论 -
SpringBootSecurity学习(09)网页版登录配置Session共享
场景当后台项目由部署在一台改为部署在多台以后,解决session共享问题最常用的办法就是把session存储在redis等缓存中。关于session和cookie概念这里就不再赘述了,在springboot-security环境下,把session存储到redis共享是非常非常简单的,除了多了一些配置,几乎不用改任何代码。共享session达到的效果就是,用户在一台服务器上面登录成功后,访问另外...原创 2020-01-14 10:39:43 · 1338 阅读 · 2 评论 -
SpringBootSecurity学习(08)网页版登录整合MyBatis
创建数据库前面介绍了springboot-security整合jdbc从数据库中查询用户的方式,适用性有限,下面介绍最常用的整合MyBatis,这种在开发和生产环境中是最常用,也是最实用的。首先需要创建数据库表,我们来创建三张表,分别是用户表,角色表,还有用户角色表,首先看用户表:只有三个字段,具体业务中需要几个字段完全由我们自己设计。密码是admin,是加密的,后面的配置中会看到加密方式,...原创 2019-09-30 19:16:51 · 1441 阅读 · 0 评论 -
SpringBootSecurity学习(07)网页版登录整合JDBC
数据库中定义用户前面我们定义用户是在配置文件和代码中定义死的默认用户,一般在开发中是不会这样做的,我们的用户都是来自我们的用户表,存储在数据库中。操作数据库的技术有很多,spring security默认支持了一个JDBC的方式,下面用这个方式来从数据库中查询用户。首先定义用户表users:enabled字段表示是否启用,改为0表示不允许此用户登录。在表里面添加两个用户 :注意密码前面都...原创 2019-09-29 20:40:14 · 1338 阅读 · 0 评论 -
SpringBootSecurity学习(06)网页版登录方法级别的权限
用户授权前面讨论过,Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理。前面介绍了登录,下面简单介绍一下用户授权。用户拥有的权限是根据用户的角色来决定的,并且security中,用户的权限可以控制到方法级别。方法级别的权限控制每个url的访问都是定义在controller方法上面的,因此需要...原创 2019-09-29 19:54:19 · 943 阅读 · 0 评论 -
SpringBootSecurity学习(05)网页版登录内存中配置默认用户
默认用户前面的例子中我们使用的都是配置文件中配置好的默认用户:除了可以配置账号密码,还可以在配置文件中配置角色:这个角色是后面实现权限过滤的重要内容,后面会重点讨论。在内存中配置默认用户这样在配置文件中默认用户局限性还是很大的。我们想配置多个不同的用户,每个用户拥有不同的角色,并且还有最重要的一点,用户的密码应该是加密的,不应该是明文。想在内存中配置,首先要实现security配...原创 2019-09-29 19:36:59 · 811 阅读 · 0 评论 -
SpringBootSecurity学习(04)网页版登录其它授权和登录处理
其它授权配置security的配置类中,对所有路径进行了统一授权配置。但是有的内容我们也需要让未登录游客有权限访问,比如js,css等静态文件,还有一些宣传页面等等。这些路径可以单独配置:我们来试验一些,springboot项目的试图页面一般放在resource文件夹下面的templates文件夹下。而静态文件一般放在resource文件夹下面的static文件夹下。我们来建立一个test....原创 2019-09-29 19:22:22 · 1416 阅读 · 2 评论 -
SpringBootSecurity学习(03)网页版登录添加自定义登录页面
自定义登录页面前面无论是使用默认配置,还是自定义配置类,都是使用的springboot-security自带的登录页面,自带的登录页面在这个版本虽然设计的非常不错,但是在实际开发中,我们通常还是使用自己的登录页面。下面来写一个非常简单的登录页面:这个页面只有填写用户名和密码的地方,然后就是一个form表单提交,没有任何其他内容。特别注意!!这里页面虽然引入了thymeleaf模板,但是没有使...原创 2019-09-29 12:47:14 · 1678 阅读 · 5 评论 -
SpringBootSecurity学习(02)网页版登陆配置类代替默认配置
增加Security配置类前面演示了一个简单的登录入门例子,使用springboot-security默认的配置实现,虽然非常简单,但是基本实现了登录功能。不过在生产环境下,显然不能仅仅使用如此简单的登录功能,我们还需要更多个性化的登录配置,所以我们要使用配置类来代替默认配置。新建一个配置类 WebSecurityConfig,继承 WebSecurityConfigurerAdapter :...原创 2019-09-28 02:12:32 · 1502 阅读 · 2 评论 -
SpringBootSecurity学习(01)网页版登录入门介绍
Web应用安全管理Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理。权限管理的设计一般使用角色来管理,即给一个用户赋予哪些角色,这个用户就具有哪些权限。Spring框架体系中,经典的安全体系框架是Security。关于系统的安全管理及各种设计,Spring Security已经大体上都实现...原创 2019-09-28 00:29:54 · 1897 阅读 · 1 评论