Spring Boot总结(一):入门
Spring Boot总结(二):Spring Boot中使用数据库
Spring Boot总结(三):Spring Boot界面设计
Spring Boot总结(四):提高数据库访问性能
Spring Boot总结(五):安全设计
Spring Boot总结(六):Spring Boot SSO
Spring Boot总结(七):使用分布式文件系统
Spring Boot总结(八):云应用开发
Spring Boot总结(九):构建高性能的服务平台
Spring Boot总结(十):自动配置实现原理
Spring Boot总结(十一):数据访问实现原理
Spring Boot总结(十二):微服务核心技术实现原理
模块化管理,其中,每个模块都是一个独立的项目:
模块化设计的好处:可以提高代码的复用性,避免重复开发,从而提高开发速度和工作效率;
如果只是本地的登录认证,只需要使用Spring Security就足够了,由于使用SSO实现了远程登录认证功能,所以在登录认证系统中,需要增加Oauth2协议,让它可以支持第三方应用的认证和授权;
登录认证系统将建立一个用户中心,对使用SSO服务的每一个应用系统,提供统一的用管理。而对于一个用户来讲,使用任何一个应用系统,都可以通过SSO的Oauth2协议进行认证和授权确认;
【添加依赖】
spring-cloud-starter-oauth2
Oauth2的认证服务中,需要一个数字证书,为通信中的数字签名等功能提供支持。
编写配置类继承AuthorizationServerConfiguration。其中,使用注解@EnableAuthorizationServer来启用Oauth2的认证服务器功能。
继承WebSecurityConfigurationAdapter可以提供记住用户状态等功能
安全配置模块集成了SSO客户端的安全策略配置和权限管理功能,可以供使用SSO的客户端使用。
@EnableOAuth2Sso将应用标注为一个SSO客户端,重载的Configure方法使用了HttpSecurity来配置一些安全管理策略。
仍然是继承WebSecurityConfigureAdapter重载configure方法实现
在SSO客户端中添加安全配置模块的依赖
当客户端引用安全配置模块之后,就必须在配置文件application.yml中进行一些相关的配置,才能够正常使用。
包括两方面的配置:
security是Oauth2的配置;
securityconfig是Spring Security的配置;
退出的时候不仅需要保证在当前的客户端中退出,还需要在SSO服务端中执行退出请求,也就是说,不能在用户退出之后,在SSO认证服务端中还保留这用户的登录状态,如果这个时候返回原来的客户端,或者访问其他有授权的客户端,都不会要求用户登录就能正常访问;
共享资源模块可以为已经授权的用户提供一些共享信息服务。
使用注解@EnableResourceServer来标注这个应用是一个资源服务器;
当一个应用被标注为资源服务器之后,就不能在浏览器中直接访问;
就是普通的控制器@RequestMapping
在客户端中要使用资源服务器的共享信息,可以使用spring-cloud-zuul提供的一个路由服务来实现。
在单独使用Spring Security安全管理的应用中,只要在控制器中使用Principal,就能够取得用户的完整信息,或者使用Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
User user = (User)authentication.getDetails();
如果需要取得登录用户的详细信息,
工程代码:https://github.com/chenfromsz/spring-boot-sso.git
设定数据库密码命令:
grant all privileges on test .* to ‘root’@’localhost’ identified by ‘12345678’;
mvn clean package -D skipTests 跳过测试打包
使用Spring Security的安全管理功能,结合使用Oauth2的认证授权协议,可以实现一个具有统一用户管理中心的SSO管理系统,实现能够为第三方应用提供登录认证和授权管理的功能,为企业的分布式应用系统开发,提供了切实可行的应用实例;
使用spring-cloud-zuul路由功能,可以通过SSO系统使用安全的共享资源;
系统的安全设计非常重要,但是系统的访问性能更加重要。
源代码地址:
https://github.com/chenfromsz/spring-boot-sso
需要在本地创建数据库,然后初始化一些数据;