首页 » SEO优化 » securitycoderphp技巧_SpringBoot2安然控制Security微做事架构师必备

securitycoderphp技巧_SpringBoot2安然控制Security微做事架构师必备

访客 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

本文内容为本书第六章《SpringBoot的Security安全掌握》

Spring Security框架简介

Spring Security是安全访问掌握框架,紧张两个功能:

securitycoderphp技巧_SpringBoot2安然控制Security微做事架构师必备

认证(Authentication):确认用户可以访问当前系统授权(Authorization):确认用户在当前系统中是否可以实行某个操作,及用户权限Security适配器

在Spring Boot中配置Security须要创建一个类继续WebSecurityConfigurerAdapter,利用@EnableWebSecurity表明,重写config方法实现配置,

securitycoderphp技巧_SpringBoot2安然控制Security微做事架构师必备
(图片来自网络侵删)

WebSecurityConfigurerAdapter是一个适配器,实现了WebSecurityConfigurer接口,供应两个方法

configurer(HttpSecurity httpSecurity)方法可以通过HttpSecurity的authorizeRequest()方法定义哪些URL须要被保护,哪些不须要;通过formLogin()方法定义当须要用户上岸时,跳转到的上岸页面

用户认证

Spring Security通过configureGlobal(AuthenticationManagerBuilder auth)完成用户认证。
利用AuthenticationManagerBuilder的inMemoryAuthentication()方法可以添加用户,并指定权限。

如下图:

权限默认利用“ROLE_”前缀,以是实际权限是“ROLE_ADMIN”

用户授权

Spring Security通过configure(HttpSecurity http)完成用户授权。

HttpSecurity的authorizeRequests()方法有多个子节点,每个matcher按照他们的顺序实行,指定用户可以访问的多个URL模式。

antMatchers利用Ant风格匹配路径regexMatchers利用正则表达式匹配路径

Security供应的安全处理方法如下:

举例如下:

也可以设置上岸行为

Spring Security核心类

(1)Authentication

Authentication用来表示用户认证信息,在用户上岸前,Security会将干系信息封装为一个Authentication工具,上岸成功后会天生一个信息更全面的用户信息Authentication工具,然后把它保存在SecurityContextHolder所持有的SecurityContext中,供后续调用。

(2)SecurityContextHolder

SecurityContextHolder是用来保存SecurityContext的,SecurityContext含有用户信息。
默认SecurityContextHolder利用ThreadLocal来保存SecurityContext。

开拓过程中获取当前用户的干系信息,比如用户名。
举例如下:

String username = SecurityContextHolder.getContext().getAuthentication().getName();

(3)UserDetails

UserDetails接口定义了一些可以获取用户名、密码、权限即是认证干系的信息的方法。

(4)UserDetailsService

Authentication.getPrincipla()返回类型是Object,本色是一个UserDetails实例。
认证时会通过UserDetailsService的loadUserByUsername()方法获取对应的UserDetails进行认证,认证后会将该UserDetails赋给认证通过的Authentication的principal,然后存入SecurityContext。

(5)GrantedAuthority

Authentication的getAuthorities()可以返回当前Authentication工具拥有的权限。
返回值是一个GrantedAuthority类型的数组,每一个GrantedAuthority工具代表当前用户的一个权限。

(6)DaoAuthenticationProvider

Security默认利用DaoAuthenticationProvider实现AuthenticationProvider接口,用于进行用户认证的处理。
DaoAuthenticationProvider在进行认证时须要一个UserDetailsService来获取用户的信息UserDetails。

(7)PasswordEncoder

Security对密码的加密都是由PasswordEncoder来完成的。
加密办法包括MD5、SHA-256等。
DaoAuthenticationProvider中有一个PasswordEncoder属性,密码加密功能紧张靠它来完成。

Spring Security验证机制

Security是由一堆Filter实现的,Filter会在SpringMVC前拦截要求。
Filter报货登出Filter(LogoutFilter)、用户名密码验证Filter(UsernamePasswordAuthenticationFilter)。
Filter再交由其他组件完成细分功能,最常用的UsernamePasswordAuthenticationFilter会持有一个AuthenticationManager引用,AuthenticationManager是一个验证管理器,专门卖力验证,但AuthenticationManager本身不做详细验证事情,AuthenticationManager持有一个AuthenticationProvider凑集,AuthenticationProvider才是做验证事情的组件,验证成功或失落败后调用对应的Handler。

SpringBoot的支持

(1)通过org.springframework.boot.autoconfigure.security包对Spring Security供应了自动配置支持,紧张通过SecurityAutoConfiguration和SecurityProperties两个类来完成自动配置。

自动的配置如下:

(2)SpringBoot自动配置一个DefaultSecurityFilterChain过滤器,用来忽略/css/、/js/、/images/、/webjars/、//favicon.ico、/error等文件的拦截

(3)SpringBoot自动注册Security过滤器

Spring Security开拓步骤

(1)修正pom文件

(2)开拓页面

用于上岸并提交username和password

(3)创建Security认证处理类

密码处理类:

用户认证和授权处理类:

(4)创建认证成功处理类

用来处理用户认证授权并跳转到指定URL

(5)编写要求掌握器

相关文章