活动地址:优快云21天学习挑战赛
概述
在 SpringSecurity - 初识 SpringSecurity 这篇文章中,我们初步认识了 SpringSecurity
,并且遗留了几个问题,我们知道 SpringBoot
的最大的特性就是 约定大于配置
,SpringBoot
底层为我们做了大量的封装,集成的每一个 Starter
框架都提供了默认配置,并且提供了可配置项,接下来我们就利用 SpringBoot
为我们提供的可配置项来自定义我们的 SpringSecurity
。
自定义用户
在 SpringSecurity - 初识 SpringSecurity 这篇文章中,我们知道 SpringSecurity
默认会给我们生成一个用户:user
,这里我们可以在 SpringBoot
的配置类中自定义默认用户:
spring:
security:
user:
name: admin
password: 123456
roles:
- user
- sales
以上配置就会代替默认的用户 user
,用户名
、密码
、角色
都可以定义
自定义配置类
SpringSecurity 官方文档 给出了 SpringBoot
集成 SpringSecurity
的 最简配置。
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// @formatter:off
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorize -> authorize
.antMatchers("/css/**", "/index").permitAll()
.antMatchers("/user/**").hasRole("USER")
)
.formLogin(formLogin -> formLogin
.loginPage("/login")
.failureUrl("/login-error")
);
}
// @formatter:on
@Bean
@Override
public UserDetailsService userDetailsService() {
UserDetails userDetails = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(userDetails);
}
}
以上配置我们暂时不需要理解是什么意思,也不需要理解为什么要这么配置,因为我们还不具备自定义配置的能力,比如上面配置中出现的 @EnableWebSecurity
注解、WebSecurityConfigurerAdapter
、HttpSecurity
、UserDetailsService
、UserDetails
等概念我们还不理解,所以我们至少要先弄懂这里出现的几个概念,在之后的文章中我们一点点来阅读 SpringSecurity
的源码,从而达到自定义配置,实现我们个性化需求的目的。
总结
以上我们利用了 SpringBoot
为我们提供的配置项自定义了 SpringSecurity
,但是这些都只是 SpringSecurity
的简单应用,SpringSecurity
能做的远远不止于此,比如我们常见的 对接现有用户数据库实现认证授权
,因为我们不可能每次都遇到新项目,有可能我们接手的是以前的老项目,需要使用 Security
来改造升级,所以我们要对 Security
有一个全面的了解,才能使用起来得心应手。
接下来我们就在 SpringSecurity 学习 专栏中进一步探讨 SpringSecurity
。