📅  最后修改于: 2023-12-03 14:47:32.795000             🧑  作者: Mango
Spring Boot Security 是基于 Spring Security 搭建的一套安全框架,它提供了简单易用的 API,可以很容易地添加身份认证和授权功能到你的项目中。
Spring Boot Security 可以与 Spring Boot 集成,因此你可以在应用程序中使用诸如基于网页的登录和表单认证、LDAP、OAuth2 和 JWT 等多种身份认证方式。
在使用 Spring Boot Security 之前,你需要将以下依赖添加到项目的 pom.xml 文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
为了添加身份认证和授权功能,你需要在 Spring Boot 应用程序中配置 Spring Security。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/**").permitAll()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().logoutSuccessUrl("/login").permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("admin").roles("ADMIN")
.and()
.withUser("user").password("user").roles("USER");
}
}
你也可以使用注解的方式配置 Spring Security,示例代码如下:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests().antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and().formLogin().defaultSuccessUrl("/", true);
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
经过上面的配置后,你的应用程序就已经具备了基本的身份认证和授权功能。
在使用 Spring Boot Security 进行身份认证时,你需要登录你的应用程序。默认情况下,Spring Boot Security 提供的登录页面位于 "/login" 路径下。
在使用表单认证时,你需要将登录信息以 POST 请求的方式发送到 "/login" 路径。如果认证成功,你将被重定向到应用程序的首页。
在我们的示例代码中,我们分别为管理员和普通用户配置了不同的访问权限。例如,管理员可以访问 "/admin" 路径,而普通用户只能访问 "/user" 路径。
在 Spring Boot Security 中,你可以使用以下方式为不同角色分配不同的权限:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/**").permitAll()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().logoutSuccessUrl("/login").permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("admin").roles("ADMIN")
.and()
.withUser("user").password("user").roles("USER");
}
}
Spring Boot Security 提供了一种简单的方式来添加身份认证和授权功能到你的应用程序中。它还可以与 Spring Boot 集成,以提供多种身份认证方式。
在使用 Spring Boot Security 时,你需要了解如何配置 Spring Security 的各种选项,以实现你的需求。通常,你可以使用注解或编程方式来配置 Spring Security。