Spring Boot中可以使用Spring Security來進行接口權限校驗。以下是一種常見的方法來實現接口權限校驗:
pom.xml
文件中添加Spring Security的依賴。<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
創建用戶和角色實體類:創建用戶和角色的實體類,并使用注解標記實體類和字段與數據庫表和列的關系。
創建用戶和角色的Repository:創建用戶和角色的Repository接口,用于與數據庫交互。
創建UserService:創建UserService類,實現UserDetailsService接口,并重寫loadUserByUsername
方法,用于根據用戶名加載用戶信息。
創建SecurityConfig:創建SecurityConfig類,繼承WebSecurityConfigurerAdapter類,并重寫configure
方法,用于配置Spring Security的相關信息。
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public/**").permitAll() // 公開接口,無需認證
.anyRequest().authenticated() // 其他接口需要進行認證
.and()
.formLogin() // 使用表單登錄
.loginPage("/login") // 登錄頁的URL
.loginProcessingUrl("/doLogin") // 登錄表單的POST URL
.permitAll()
.and()
.logout()
.logoutUrl("/logout") // 登出URL
.logoutSuccessUrl("/login") // 登出成功后跳轉的URL
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
@PreAuthorize
注解來標記需要進行權限校驗的接口。@RestController
@RequestMapping("/api")
public class MyController {
@PreAuthorize("hasRole('ROLE_ADMIN')")
@GetMapping("/admin")
public String admin() {
return "Admin Page";
}
@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_USER')")
@GetMapping("/user")
public String user() {
return "User Page";
}
@GetMapping("/public")
public String publicPage() {
return "Public Page";
}
}
以上就是一種基于Spring Boot和Spring Security進行接口權限校驗的方法。在這種方法中,我們使用@PreAuthorize
注解來標記接口,通過指定角色來進行權限校驗。當訪問帶有@PreAuthorize
注解的接口時,Spring Security會自動進行權限校驗,如果用戶沒有相應的角色,將會返回403 Forbidden錯誤。