Spring Security(maven项目) 3.0.2.9版本
前言:
通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。
温故知新:
由于没办法实时体验Spring Security的运用,单纯靠文字和代码很难去真正的理解Spring Security,所以作者决定再一次修改路线
先从Spring Security 配置开始,因为它前面的内容是在说,这些配置有什么用,但就是不告诉你怎么配
正片:
第一步:创建一个类(名字随便起,只要你看得懂)
第二步:添加两个注解
第三步:将剩下内容复制,并添加引用
全代码如下
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration //是spring boot的配置类注解,专门处理配置的
@EnableWebSecurity //是Spring Security java配置必须要的注解
public class WebSecurityConfig {
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser
(
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build());
return manager;
}
}
代码完成后,我们回来看官方介绍
第一步是创建我们的Spring Security Java配置。该配置创建了一个被称为 springSecurityFilterChain
的 Servlet 过滤器,它负责应用程序中的所有安全问题(保护应用程序的URL,验证提交的用户名和密码,重定向到登录表单,等等)。下面的例子显示了Spring Security Java配置的最基本例子。
第一步是创建我们的Spring Security Java配置。
作者解读:
有第一步就会有第二步,第三步,直至完成。
该配置创建了一个被称为 springSecurityFilterChain
的 Servlet 过滤器,它负责应用程序中的所有安全问题(保护应用程序的URL,验证提交的用户名和密码,重定向到登录表单,等等)。
作者解读:
图片中最右边的内容,SecurityFilter
下面的例子显示了Spring Security Java配置的最基本例子。
作者解读:
最简单的配置
作者 总结:
这个是一个SpringSecurity基本配置
作者解读:
这个对这个配置实现功能的具体化——实际上只有一段是,当然可能这一段还是默认配置
@Configuration //是spring boot的配置类注解,专门处理配置的
@EnableWebSecurity //是Spring Security java配置必须要的注解
public class WebSecurityConfig {
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser
(
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build());
return manager;
}
}
InMemoryUserDetailsManager,它提供了对基于内存认证的支持
翻译过来就是基于表单的用户名/密码登录校验,在开篇,使用Security框架时,他自带了这么一个用户名/密码校验,也就是说,这段代码啥都没提供!
继续往下看,能不能与作者认知达成共识——这段代码啥都没提供!
abstractSecurityWebApplicationInitializer 抽象安全网络应用程序初始化器
下一步是在WAR文件中注册 springSecurityFilterChain
作者解读:第二步是在WAR文件中注册SpringSecurityFilterChain
有意思的是,官方在最开始涉及到的注册时,他告诉我们用什么注册,却不告诉我们怎么注册
这时,再来看这句话——它为Spring Security的所有Servlet支持提供了一个起点,配上注册
FilterChainProxy 提供 起点,怎么提供起点——注册
怎么注册?不告诉你,你看到配置你就知道了
你可以在Servlet 3.0以上的环境中通过 Spring的 WebApplicationInitializer 支持 在Java配置中完成。毫不奇怪,Spring Security提供了一个基类(AbstractSecurityWebApplicationInitializer
)来确保 springSecurityFilterChain
为你注册。
作者解读:
它提供了一个基本类,让我们注册
我们使用 AbstractSecurityWebApplicationInitializer
的方式有所不同,这取决于我们是否已经在使用Spring,或者Spring Security是否是我们应用中唯一的Spring组件。
作者解读:两种注册模式
使用了SpringMCV,和未使用Spring两种,很显然,在我们的环境框架中是涉及到spring,所以选第二个
在旧版本中,Security架构里是明显涉及了Spring的
java生态中除了spring还有其他框架,Spring Security的建立除了服务spirng还服务其他框架
所以提供了两种,我们是基于springboot的Maven,所以选第二个
第一段代码的作用:为你的应用程序中的每一个URL注册SpringSecurityFilterChain
第二段代码的作用:不仅为每一个URL注册SpringSecurityFilterChain,还将自定义配置进行添加
共同点:它们继承的都是同一个基本类
当你实现第二段代码时,会需要实现代码
实现
官方将[0]改为了{文件名},文件名为带有
@Configuration //是spring boot的配置类注解,专门处理配置的 @EnableWebSecurity
这两个注解的类
我们能添加很多了Security配置吗?
Class【】{}是一个数组,数组不止有一个,所以我们可以添加多个Security配置
到这里,我们完成了Security的基本配置
总结:
java配置到运用分为两步
第一步:配置Security Filter
第二步:注册Security Filter Chain
在FilterChainProxy注册,继承AbstractAnnotationConfigDispatcherServletInitializer类