权限认证框架SpringSecurity
一、为什么要做权限认证
在WEB开发的过程当中,安全一直是很重要的一方面。安全和直接的业务是没有直接挂钩的,但是在业务实现的初期如果没有考虑的安全性的化,在后期迭代的时候就会出现很多的问题。例如存在着安全漏洞和构建安全框架的复杂性。为此,在WEB开发的设计阶段我们就需要有一个构建安全框架的意识,并将其运用到整个开发过程当中,只有这样开发出的系统在安全方面才能得到保障。
目前市面上存在比较有名的:Shiro,Spring Security !还有我最近有接触到一款轻量级的JAVA权限认证框架sa-token
今天我们就简单介绍一下SpringSecurity,这里只是抛砖引玉,对SpringSecurity一些简单的知识和简单的搭建做一个介绍,要具体的掌握SpringSecurity单靠一篇文章是远远不够的,需要不断的探索和实践练习。
二、什么是SpringSecurity
我们看下它的官网介绍:Spring Security官网地址
Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它实际上是保护基于spring的应用程序的标准。
Spring Security是一个框架,侧重于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring安全性的真正强大之处在于它可以轻松地扩展以满足定制需求
Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括**用户认证(Authentication)和用户授权(Authorization)**两个部分。
用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
对于上面提到的两种应用情景,Spring Security 框架都有很好的支持。在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。
三、认识SpringSecurity
Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理!
记住几个类:
WebSecurityConfigurerAdapter:自定义Security策略
AuthenticationManagerBuilder:自定义认证策略
@EnableWebSecurity:开启WebSecurity模式
核心过滤器:
UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。
ExceptionTranslationFilter: 处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException 。
FilterSecurityInterceptor: 负责权限校验的过滤器。
Spring Security的两个主要目标是 “认证” 和 “授权”(访问控制)。
“认证”(Authentication)
身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。
身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用。
认证流程如下:
在此,我们要了解以下几个接口:
Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。
AuthenticationManager接口:定义了认证Authentication的方法
UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的方法。
UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装成UserDetails对象返回。然后将这些信息封装到Authentication对象中。
“授权” (Authorization)
授权发生在系统成功验证您的身份后,最终会授予您访问资源(如信息,文件,数据库,资金,位置,几乎任何内容)的完全权限。
这个概念是通用的,而不是只在Spring Security 中存在。
在SpringSecurity中,会使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的权限信息。当前用户是否拥有访问当前资源所需的权限。
所以我们在项目中只需要把当前登录用户的权限信息也存入Authentication。
然后设置我们的资源所需要的权限即可。
四、SpringSecurity的使用
使用在这篇文章中就不做多的介绍了,提供以下几篇优质的文章供大家学习,后续我也会更新关于SpringSecurity使用的文章。
用户认证:https://blog.csdn.net/qq_33369905/article/details/106647308
狂神的文章,很清晰的从每一步来说明SpringSecurity认证的过程,适合入门。
用户认证(进阶):https://zhuanlan.zhihu.com/p/349962352
这篇文章更多的是从SpringSecurity使用的角度来进行说明的,可以对SpringSecurity的使用有更深的了解
用户认证+授权:https://blog.csdn.net/weixin_43847283/article/details/124075302
这篇文章就很全面的介绍了SpringSecurity的整个链路和用户认证+授权的使用方法,搞懂这篇文章基本上就能使用SpringSecurity了。再加上不断的实践定能掌握SpringSecurity框架。
希望以上文章会对你带来帮助,下篇文章见。