1.SpringSecurity 框架介绍
用户认证(Authentication)和用户授权(Authorization)。其本质是一个过滤器链。
用户认证:
验证某个用户是否为系统中的合法主体。
用户授权:
验证某个用户是否有权限执行某个操作。
2.SpringSecurity 入门案例
pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringSecurity需要导入的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.5.14</version>
</dependency>
security默认登陆用户:username:user password:见控制台
登录成功实例:
***过滤器是如何进行加载的?***
1.使用SpringSecurity配置过滤器 (DelegatingFilterProxy),SpringBoot项目中无需手动配置。
UserDetailsService接口与PasswordEncoder接口讲解:
UserDetailsService:查询数据库用户名和密码过程。
* 创建类继承UsernamePasswordAuthenticationFilter,重写三个方法。
* 创建类实现UserDetailsService,编写查询数据过程,返回User对象(安全框架提供对象)。
PasswordEncoder:数据加密接口,用于返回User对象里面加密后的密码。
3.SpringSecurity Web 权限方案
认证和授权
设置登录用户名和密码的三种方式:
1.通过配置文件
spring.security.user.name=username(账户)
spring.security.user.password=password(密码)
2.通过配置类
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 密码加密 BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String password = passwordEncoder.encode("123456"); auth.inMemoryAuthentication().withUser("bao").password(password).roles("admin"); } // 不加会报错 @Bean PasswordEncoder password(){ return new BCryptPasswordEncoder(); } }3.自定义编写实现类
@Configuration public class SecurityConfigTest extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(password()); } @Bean PasswordEncoder password(){ return new BCryptPasswordEncoder(); } }@Service("userDetailsService") public class MyUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("role"); return new User("city",new BCryptPasswordEncoder().encode("123456"),auths); } }