使用Spring Boot与Spring MVC进行Web开发时,如果项目引入spring-boot- starter-security依赖启动器,MVC Security 安全管理功能就会自动生效,其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。其中,SecurityAutoConfiguration会导入并自动化配置SpringBootWebSecurityConfiguration用于启动Web安全管理,UserDetailsServiceAutoConfiguration则用于配置用户身份信息。
通过自定义WebSecurityConfigurerAdapter 类型的Bean组件,可以完全关闭Security 提供的Web应用默认安全配置,但是不会关闭UserDetailsService用户信息自动配置类。如果要关闭UserDetailsService默认用户信息配置,可以自定义UserDetailsService、AuthenticationProvider或AuthenticationManager类型的Bean组件。另外,可以通过自定义WebSecurityConfigurerAdapter类型的Bean组件覆盖默认访问规则。Spring Boot 提供了非常多方便的方法,可用于覆盖请求映射和静态资源的访问规则。
下面我们通过Spring Security API查看WebSecurityConfigurerAdapter的主要方法,具体所示:
configure(AuthenticationManagerBuilder auth):定制用户认证管理器来实现用户认证
configure(HttpSecurity http):定制基于HTTP请求的用户访问控制
从上面可以看到,WebSecurityConfigurerAdapter类中包含两个非常重要的配置方法,分别是configure(AuthenticationManagerBuilder auth)和configure(HttpSecurity http)。Configure(AuthenticationManagerBuilder auth)方法用于构建认证管理器,configure(HttpSecurity http)方法用于对基于HTTP的请求进行请求访问控制。
一、自定义用户认证:
通过自定义WebSecurityConfigurerAdapter类型的Bean组件,并重写configure(AuthenticationManagerBuilder auth)方法,可以自定义用户认证。针对自定义用户认证,Spring Security提供了多种自定义认证方式, 包括有: In-Memory Authentication (内存 身份认证)、JDBCAuthentication ( JDBC身份认证)、LDAP Authentication ( LDAP身份认证)、AuthenticationProvider (身份认证提供商)和UserDetailsService (身份详情服务)。 下面我们选取其中3个比较有代表性的方式讲解如何实现自定义用户认证。
二、自定义用户授权管理:
当一个系统建立之后,通常需要适当地做一些权限控制,使得不同用户具有不同的权限操作系统。例如,一般的项目中都会做一些简单的登录控制,只有特定用户才能登录访问。接下来我们针对Web应用中常见的自定义用户授权管理进行介绍。
自定义用户访问控制:
实际生产中,网站访问多是基于HTTP请求的,上面MVC Security 安全配置介绍时,我们已经分析出通过重写WebSecurityConfigurerAdapter类的configure(HttpSecurity http)方法可以对基于HTTP的请求访问进行控制。下面我们通过对configure(HttpSecurity http)方法剖析,分析自定义用户访问控制的实现过程。
configure(HttpSecurity http)方法的参数类型是HttpSecurity类,HttpSecurity类提供了Http请求的限制以及权限、Session 管理配置、CSRF跨站请求问题等方法,具体如下所示。
HttpSecurity 类的主要方法及说明:
authorizeRequests():开启基于HtpSereleRequest请求访问的限制
formLogin():开启基于表单的用户登录
httpBasic():开启基于HTTP请求的Basic认证登录