梦入琼楼寒有月,行过石树冻无烟

Spring boot Security

Spring boot Security即Spring推出的一个专门针对于Spring应用系统的安全框架,充分利用了spinrg框架的整体功能为Spinrg应用提供了安全访问控制的解决方案。在Spring boot Security之中或是网络安全中有两个非常重要的概念分别为**授权(Authorization)认证(Authentication)**两个,授权即确定用户在当前应用系统下所有的功能和权限,而认证即确认是否有级别,或是条件来进入当前系统身份。

Spring Security 请求授权

在Spring Security之中的适配器类里,通过重写configure(HTTOSecurity http)方法完成用户授权,在configure(HttpSecurity http)方法中,在匹配请求路径后,可以针对当前用户对请求进行安全的处理,Spring boot提供的安全方法如:

ID DA FA
anyRequest 匹配所有请求路径
access(String attribute) Spring EL表达式结果为true时可以访问
anonymous() 匿名可以访问
authenticated() 用户登入后可以访问
denyAll() 用户不能访问
fullyAuthenticated() 用户完全认证可以访问
permitAll() 任何用户都可以访问
remernberMe() 允许通过remember-me登入的用户访问
hasAnyAuthority(String) 参数表示权限 用户与群线任一权限相同即可访问
hasAnyRole(String) 参数表示角色 用户角色与其中任一角色相爱嗯痛即可访问
hasAuthority(String authority) 参数表示权限 用户权限与参数相同即可访问
hasIpAddress(String ipaddressExpression) 参数表示IP地址 用户IP和参数匹配即可访问
hasRole(String role) 参数表示角色 用户角色与参数相同即可访问

Spring boot Security 核心类

Spring boot Security 核心类共包括Authentication、SecurityContextHolder、UserDetails、UserDetailsService、GrentedAuthority、DaoAuthenticatioProvider、PasswordEncoder等核心类分别主要用于:

Authentication

authentication用于封装用户认证的信息接口,在用户登入之前spring Security将相关信息会分装成一个Authentication具体的实现类对象,登入后将会生成一个更加全面和包含用户权限的Authentication对象,之后将对象保存在SecurityContextHolder所持有的SecurityContext中。

SecurityContextHolder

SecurityContextHolder及是SecurityContext的所有类,SecurityContext中将会包含当前认证用户的详细信息。Spring Security使用一个Authentication对象描述当前认证用户的相关信息。

UserDetails

UserDetails是spring Security的一个核心接口,该接口定义了一些可以用户获取用户名、密码、权限等与认证信息相关的方法。

UserDatailsService

UserDatails是通过UserDatailsService的loadUserByUsername(String username)方法加载的,而UserDatailsService也是一个接口,也需要实现自己的价值来加载自定义UserDatails。所以在等于认证的时候Spring Security将会通过UserDatailsService的loadUserByUsername方法来获取对应的UserDatails进行验证。
而验证后将会通过该UserDetails赋予认证通过的Auhentication的principal,之后Auhentication保存在SecurityContetHelder之中,在开发的过程中,如果需要使用用户信息,可以通过SecurityContetHelder获取存放在SecurityContext中存放于UserDetails实力里的Authentication、principal方法。

GrantedAuthority

GrantedAuthority是一个接口,通常是通过UserDetailsService进行加载,然后赋值给UserDetails。在Authentication的getAuthorities()方法可以返回当前Authentication对象拥有的权限,即返回一个GrantedAuthority类型的数组。

DaoAuthenticationProvider

在Spring Security的安全框架中,默认使用DaoAuthenticationProvider来实现AuthenticationProvider接口进行用户的认证处理。DaoAuthenticationProvider进行认证的时候需要一个UserDrtailsService来获取用户信息的UserDetails。

PasswordEncoder

在Spring Security安全框架中,通过PasswordEncoder接口完成对密码的加密,PasswordEncoder有多种实现,其中包含MD55、SHA-256的加密等,开发时可直接使用即可。在Spring boot之中,使用BCryptPasswordEncoder加密是比较不错的选择,BCryptPasswordEncoder使用BCrypt的强散列哈兮加密进行实现,并可由客户端指定加密的强度,从字面意思上来理解就是说强度越高、安全性就越高。

本书作为Spring boot 和Thymeleaf基础入门指导书,暂不对Spring Security有过多描述,作者也曾尝试着实现Spring Security,但实在太多,已经超出了本书的字数和章节范围,有兴趣的读者可自行阅读,下一次将会另出一本专门针对Spring Security的书籍。

⬅️ Go back