溫馨提示×

如何配置Spring Boot Endpoints的訪問權(quán)限

小樊
93
2024-09-14 09:11:52
欄目: 編程語言

要配置Spring Boot Endpoints的訪問權(quán)限,你需要使用Spring Security

  1. 添加依賴

pom.xml文件中添加Spring Security依賴:

   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 配置Spring Security

創(chuàng)建一個新的Java類,例如SecurityConfig,并繼承WebSecurityConfigurerAdapter。然后重寫configure方法以自定義安全配置。

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/actuator/**").hasRole("ADMIN") // 允許訪問/actuator/*的端點的角色為ADMIN
                .anyRequest().authenticated() // 其他請求需要認證
                .and()
            .formLogin() // 啟用表單登錄
                .permitAll() // 允許所有用戶訪問登錄頁面
                .and()
            .logout() // 啟用注銷功能
                .permitAll(); // 允許所有用戶訪問注銷頁面
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication() // 使用內(nèi)存中的認證
                .withUser("admin").password("{noop}admin123").roles("ADMIN"); // 創(chuàng)建一個用戶名為admin,密碼為admin123,角色為ADMIN的用戶
    }
}

這個示例配置了以下規(guī)則:

  • 只有具有ADMIN角色的用戶可以訪問/actuator/*的端點。
  • 其他請求需要認證。
  • 啟用表單登錄和注銷功能。
  • 使用內(nèi)存中的認證,創(chuàng)建一個用戶名為admin,密碼為admin123,角色為ADMIN的用戶。

根據(jù)你的需求,你可以修改這些規(guī)則。更多關(guān)于Spring Security的配置選項,請參考官方文檔:https://docs.spring.io/spring-security/site/docs/current/reference/html5/#jc

0