Spring Security OAuth2.0认证授权
以Security6.3.1为例,低版本与此相比有部分差异
快速上手
一:创建SpringBoot工程引入Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
此时启动工程,项目已纳入Spring Security管理,访问http://localhost:8080/项目地址/login会进入到security提供的登陆界面,低版本控制台会打印初始密码。
二:创建配置类,继承WebSecurityConfigurerAdapter
注意:在 Spring Security 6 中,WebSecurityConfigurerAdapter 完全被移除,因此不能再继承它来配置安全设置。应该使用@EnableWebSecurity来替代
分为3部分
1:定义用户信息服务(查询用户信息)
@Bean
public UserDetailsService userDetailsService(){
//获取用户信息,此处为内存存储
UserDetails userDetails = User.withUsername("chenyi").password("123456").authorities("admin").build();
UserDetails userDetails2 = User.withUsername("cy").password("123456").authorities("user").build();
UserDetails userDetails3 = User.withUsername("test").password("123456").build();
return new InMemoryUserDetailsManager(userDetails,userDetails2,userDetails3);
}
2:配置密码加密方式
@Bean
public PasswordEncoder passwordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
3:配置安全拦截机制
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
//当一个请求到达时,Spring Security会从上至下检查这些规则,直到找到第一个与请求URL匹配的规则为止。
// 一旦找到匹配的规则,就会应用该规则定义的安全约束,并且不再继续检查下面的规则。
http
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/test/admin/**").hasAuthority("admin")//web授权,访问/admin/**需要ADMIN权限
.requestMatchers("/test/user/**").hasAuthority("user")//访问/user/**需要USER或者ADMIN权限
.requestMatchers("/test/**").authenticated()//访问/test/**需要认证
.anyRequest().permitAll()//其他请求不需要认证
)
.formLogin((form) -> form
//.loginPage("/login")//自定义登录页面
.failureUrl("https://www.baidu.com/")//失败跳转路径
.permitAll()//允许所有用户访问
)
.logout((logout) -> logout.permitAll());//登出界面允许所有用户访问
return http.build();
}
无权限访问的会返回403
更多内容文章请访问