![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第8章 Spring Boot的安全控制_第1页](http://file4.renrendoc.com/view8/M01/12/35/wKhkGWcvZ7mAQ6LaAABqExv_rJY504.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第8章 Spring Boot的安全控制_第2页](http://file4.renrendoc.com/view8/M01/12/35/wKhkGWcvZ7mAQ6LaAABqExv_rJY5042.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第8章 Spring Boot的安全控制_第3页](http://file4.renrendoc.com/view8/M01/12/35/wKhkGWcvZ7mAQ6LaAABqExv_rJY5043.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第8章 Spring Boot的安全控制_第4页](http://file4.renrendoc.com/view8/M01/12/35/wKhkGWcvZ7mAQ6LaAABqExv_rJY5044.jpg)
![《 Spring Boot从入门到实战(第2版·微课视频版)》 课件 第8章 Spring Boot的安全控制_第5页](http://file4.renrendoc.com/view8/M01/12/35/wKhkGWcvZ7mAQ6LaAABqExv_rJY5045.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章SpringBoot的安全控制学习目的与要求本章首先重点讲解SpringSecurity安全控制机制,然后介绍SpringBootSecurity操作实例。通过本章的学习,掌握如何使用SpringSecurity安全控制机制解决企业应用程序的安全问题。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录8.1SpringSecurity快速入门8.2SpringBoot的支持8.3实际开发中的SpringSecurity操作实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.1.1什么是SpringSecuritySpringSecurity是一个专门针对Sping应用系统的安全框架,充分利用了Spring框架的依赖注入和AOP功能,为Spring应用系统提供安全访问控制解决方案。在SpringSecurity安全框架中,有两个重要概念,即授权(Authorization)和认证(Authentication)。授权即确定用户在当前应用系统下所拥有的功能权限;认证即确认用户访问当前系统的身份。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.1.2SpringSecurity的用户认证在SpringSecurity安全框架中,可以通过配置AuthenticationManager认证管理器完成用户认证。示例代码如下:@BeanpublicAuthenticationManagerauthenticationManager(AuthenticationConfigurationauthenticationConfiguration)throwsException{returnauthenticationConfiguration.getAuthenticationManager();}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.内存中的用户认证在SpringSecurity安全框架中,InMemoryUserDetailsManager实现了UserDetailsService,以支持存储在内存中的用户名/密码的身份验证。InMemoryUserDetailsManager通过实现UserDetailsMnager接口提供对UserDetails的管理。当SpringSecurity配置为接受用户名和密码进行身份验证时,会使用基于UserDetails的身份验证。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.内存中的用户认证@BeanpublicUserDetailsServiceusers(){ UserDetailsuser=User.builder() .username("chenheng") .password("xxxx")
.roles("USER") .build(); UserDetailsadmin=User.builder() .username("admin") .password("yyyy")
.roles("DBA","ADMIN") .build(); returnnewInMemoryUserDetailsManager(user,admin);}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.通用的用户认证我们在实际应用中,可以查询数据库获取用户和权限,这时我们需要自定义实现org.springframework.security.core.userdetails.UserDetailsService接口的类,并重写publicUserDetailsloadUserByUsername(Stringusername)方法查询对应的用户和权限。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.1.4SpringSecurity的请求授权在SpringSecurity安全框架中,可以通过配置SecurityFilterChain完成用户授权。示例代码如下:@BeanpublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{ http .authorizeHttpRequests(authorize->authorize .requestMatchers("/xxx").permitAll() .requestMatchers("/user/**").hasRole("USER") //其他所有请求认证授权后才能访问
.anyRequest().authenticated() ); returnhttp.build();}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.1.4SpringSecurity的请求授权在filterChain(HttpSecurityhttp)方法中,使用HttpSecurity的authorizeHttpRequests()方法的子节点给指定用户授权访问URL模式。我们可以通过requestMatchers()方法匹配URL路径。匹配请求路径后,可以针对当前用户对请求进行安全处理。方法用途anyRequest()匹配所有请求路径access(Stringattribute)SpringEL表达式结果为true时可以访问anonymous()匿名可以访问authenticated()用户登录后可访问denyAll()用户不能访问fullyAuthenticated()用户完全认证可以访问(非remember-me下自动登录)hasAnyAuthority(String...)参数表示权限,用户权限与其中任一权限相同就可以访问hasAnyRole(String...)参数表示角色,用户角色与其中任一角色相同就可以访问hasAuthority(Stringauthority)参数表示权限,用户权限与参数相同才可以访问hasRole(Stringrole)参数表示角色,用户角色与参数相同才可以访问permitAll()任何用户都可以访问rememberMe()允许通过remember-me登录的用户访问《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.1.5SpringSecurity的核心类SpringSecurity的核心类包括Authentication、DaoAuthenticationProvider、GrantedAuthority、PasswordEncoder、SecurityContextHolder、UserDetails和UserDetailsService。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
1.AuthenticationAuthentication用来封装用户认证信息的接口,在用户登录认证之前,SpringSecurity将相关信息封装为一个Authentication具体实现类的对象,在登录认证成功后将生成一个信息更全面、包含用户权限等信息的Authentication对象,然后将该对象保存在SecurityContextHolder所持有的SecurityContext中,方便后续程序进行调用,如当前用户名、访问权限等。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
2.SecurityContextHolderSecurityContextHolder顾名思义是用来持有SecurityContext的类。SecurityContext中包含当前认证用户的详细信息。SpringSecurity使用一个Authentication对象描述当前用户的相关信息。例如,最常见的是获得当前登录用户的用户名和权限。privateStringgetUname(){
returnSecurityContextHolder.getContext().getAuthentication().getName();}privateStringgetAuthorities(){
Authenticationauthentication=SecurityContextHolder.getContext().getAuthentication();
List<String>roles=newArrayList<String>();
for(GrantedAuthorityga:authentication.getAuthorities()){
roles.add(ga.getAuthority());
}
returnroles.toString();}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
3.UserDetailsUserDetails是SpringSecurity的一个核心接口。该接口定义了一些可以获取用户名、密码、权限等与认证相关的信息的方法。通常需要在应用中获取当前用户的其他信息,如Email、电话等。这时只包含认证相关的UserDetails对象可能就不能满足我们的需要了。我们可以实现自己的UserDetails,在该实现类中定义一些获取用户其他信息的方法,这样我们就可以直接从当前SecurityContext的Authentication的principal中获取用户的其他信息。Authentication.getPrincipal()的返回类型是Object,但通常返回的其实是一个UserDetails的实例,通过强制类型转换可以将Object转换为UserDetails类型。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
4.UserDetailsServiceUserDetails是通过UserDetailsService的loadUserByUsername(Stringusername)方法加载的。UserDetailsService也是一个接口,也需要实现自己的UserDetailsService来加载自定义的UserDetails信息。登录认证时,SpringSecurity将通过UserDetailsService的loadUserByUsername(Stringusername)方法获取对应的UserDetails进行认证,认证通过后将该UserDetails赋给认证通过的Authentication的principal,然后再将该Authentication保存在SecurityContext中。在应用中,如果需要使用用户信息,可以通过SecurityContextHolder获取存放在SecurityContext中的Authentication的principal,即UserDetails实例。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
5.GrantedAuthorityAuthentication的getAuthorities()方法可以返回当前Authentication对象拥有的权限(一个GrantedAuthority类型的数组),即当前用户拥有的权限。GrantedAuthority是一个接口,通常是通过UserDetailsService进行加载,然后赋给UserDetails。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
6.DaoAuthenticationProvider在SpringSecurity安全框架中,默认使用DaoAuthenticationProvider实现AuthenticationProvider接口进行用户认证的处理。DaoAuthenticationProvider进行认证时,需要一个UserDetailsService来获取用户信息UserDetails。当然我们可以实现自己的AuthenticationProvider,进而改变认证方式。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
7.PasswordEncoder在SpringSecurity安全框架中,是通过PasswordEncoder接口完成对密码的加密。SpringSecurity对PasswordEncoder有多种实现,包括MD5加密、SHA-256加密等,开发者只需直接使用即可。在SpringBoot应用中,使用BCryptPasswordEncoder加密是较好的选择。BCryptPasswordEncoder使用BCrypt的强散列哈希加密实现,并可以由客户端指定加密强度,强度越高安全性越高。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.1.6SpringSecurity的验证机制SpringSecurity的验证机制是由许多Filter实现的,Filter将在SpringMVC前拦截请求,主要包括注销Filter(LogoutFilter)、用户名密码验证Filter(UsernamePasswordAuthenticationFilter)等内容。Filter再交由其他组件完成细分的功能,最常用的UsernamePasswordAuthenticationFilter会持有一个AuthenticationManager引用,AuthenticationManager是一个验证管理器,专门负责验证。AuthenticationManager持有一个AuthenticationProvider集合,AuthenticationProvider是做验证工作的组件,验证成功或失败之后调用对应的Hanlder(处理)。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录8.1SpringSecurity快速入门8.2SpringBoot的支持8.3实际开发中的SpringSecurity操作实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.2SpringBoot的支持在SpringBoot应用中,我们只需引入spring-boot-starter-security依赖即可使用SpringSecurity安全框架,这是因为SpringBoot对SpringSecurity提供了自动配置功能。从org.springframework.boot.autoconfigure.security.SecurityProperties类中,我们可以看到使用以“spring.security”为前缀的属性配置了SpringSecurity的相关默认配置。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
目录8.1SpringSecurity快速入门8.2SpringBoot的支持8.3实际开发中的SpringSecurity操作实例《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例【例7-1】在SpringBoot应用中,使用基于SpringDataJPA的SpringSecurity安全框架。1.创建SpringBootWeb应用ch8创建基于Lombok、SpringDataJPA、Thymeleaf及SpringSecurity的Web应用ch8,如图8.1所示。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例2.修改pom.xml文件,添加MySQL依赖在pom.xml文件中添加MySQL连接器依赖,配置内容与【例6-1】中的相同,不再赘述。3.设置Web应用ch8的上下文路径及数据源配置信息在应用ch8的perties文件中配置内容与【例6-1】中的相同,不再赘述。4.整理脚本样式静态文件JS脚本、CSS样式、图片等静态文件默认放置在src/main/resources/static目录下,ch8应用引入的BootStrap和jQuery与【例5-5】中的一样,不再赘述。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例5.创建用户和权限持久化实体类在应用ch8的src/main/java目录下,创建名为com.ch.ch8.entity的包,并在该包中创建持久化实体类MyUser和Authority。MyUser类用来保存用户数据,用户名唯一。Authority用来保存权限信息。用户和权限是多对多的关系。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例6.创建数据访问层接口在应用ch8的src/main/java目录下,创建名为com.ch.ch8.repository的包,并在该包中创建名为MyUserRepository的接口,该接口继承了JpaRepository,核心代码如下:publicinterfaceMyUserRepositoryextendsJpaRepository<MyUser,Integer>{ //根据用户名查询用户,方法名命名符合SpringDataJPA规范
MyUserfindByUsername(Stringusername);}在com.ch.ch8.repository包中,创建名为AuthorityRepository的接口,该接口继承了JpaRepository,具体代码如下:publicinterfaceAuthorityRepositoryextendsJpaRepository<Authority,Integer>{}《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例7.创建业务层在应用ch8的src/main/java目录下,创建名为com.ch.ch8.service的包,并在该包中创建UserService接口和UserServiceImpl实现类。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例8.创建控制器类在应用ch8的src/main/java目录下,创建名为com.ch.ch8.controller的包,并在该包中创建控制器类TestSecurityController。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例9.创建应用的安全控制相关实现在应用ch8的src/main/java目录下,创建名为com.ch.ch8.security的包,并在该包中创建MyUserSecurityService、MyAuthenticationSuccessHandler和SpringSecurityConfig类。MyUserSecurityService实现了UserDetailsService接口,并通过重写loadUserByUsername(Stringusername)方法查询对应的用户,并将用户名、密码、权限等与认证相关的信息封装在UserDetails对象中。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例MyAuthenticationSuccessHandler继承了SimpleUrlAuthenticationSuccessHandler类,并重写了handle(HttpServletRequestrequest,HttpServletResponseresponse,Authenticationauthentication)方法,根据当前认证用户的角色指定对应的URL。SpringSecurityConfig类是认证和授权处理的配置类,需要使用@Configuration和@EnableWebSecurity注解。在该类中配置了加密规则、认证实现方式、认证管理器以及授权操作。《SpringBoot从入门到实战(第2版·微课视频版)》陈恒
主编,清华大学出版社,2024
8.3实际开发中的SpringSecurity操作实例10.创建用于测试的视图页
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际工程总承包协议书
- 餐饮管理居间协议示例范本
- 二零二五年度办事处争议解决协议(农产品市场纠纷处理)
- 人力资源培训实习协议书
- 个人借贷无抵押合同
- 民办学校校长聘用合同范本
- 学校电脑采购合同范本
- 产研学合作协议书范本
- 会计兼职协议书范本
- 类风湿治疗协议书范本
- 前列腺癌诊断治疗指南
- 中国银行招聘笔试真题「英语」
- 江苏省2023年对口单招英语试卷及答案
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
- GB/T 25784-20102,4,6-三硝基苯酚(苦味酸)
- 特种设备安全监察指令书填写规范(特种设备安全法)参考范本
- 硬笔书法全册教案共20课时
- 《长方形的面积》-完整版课件
- 五年级上册英语Module6Unit1Youcanplaybasketballwell外研社课件
- 工业企业现场监测工况核查表
- 沉淀池及排水沟清理记录表
评论
0/150
提交评论