Аутентификация Spring Security Filters
Я относительно новичок в Srping Security Framework. В период обучения я пытался реализовать базовую функцию безопасности аутентификации для частной конечной точки API./private/**
. Приложение также содержит общедоступный API/public/**
где не применяются фильтры и доступно для всех. Мой код представлен ниже:
Сотрудник.kt
data class Employee(val name: String, val age: Int)
SpringConfig.kt
@Configuration
@EnableWebSecurity
class SecurityConfig {
@Bean
fun securityFilterChain(http: HttpSecurity) : SecurityFilterChain? {
http
.authorizeHttpRequests { authz ->
authz
.antMatchers("/private/**").authenticated()
}
.formLogin(withDefaults())
return http.build()
}
@Bean
fun users(): InMemoryUserDetailsManager {
return InMemoryUserDetailsManager(
User.withUsername("john")
.password("{noop}password")
.authorities("read")
.build()
)
}
}
Конечные точки: PublicEmployee.kt
@RestController
@RequestMapping("/public")
class PublicEmployeeResource {
@GetMapping("/employee")
fun getEmployee(): ResponseEntity<Employee> {
val employee = Employee(name="John", age=42)
return ResponseEntity.ok(employee)
}
}
PrivateEmployee.kt
@RestController
@RequestMapping("/private")
class PrivateEmployeeResource {
@GetMapping("/employee")
fun getEmployee(principal: Principal): ResponseEntity<Employee> {
val employee = Employee(name="John", age=42)
println("Principal is ${principal}")
return ResponseEntity.ok(employee)
}
}
Когда я использую.formLogin(withDefaults())
для аутентификации я получаю изображение ниже, и я могу передать пользователя и пароль, как указаноInMemoryUserDetailsManager
.
Однако, если я изменю аутентификацию наhttpBasic()
Я получаю ответ от объекта Employee без какой-либо аутентификации.
Не уверен, что я делаю неправильно.
Также я читал, что WebConfigurerAdapter() будет устаревшим. Как я могу настроить несколько фильтров для определенных шаблонов URL-адресов?