MST

星途 面试题库

面试题:Kotlin Spring Boot 中如何配置基本的身份验证

在 Kotlin Spring Boot 项目里,阐述配置基于 HTTP Basic 身份验证的主要步骤,包括相关依赖引入、配置类的编写等。
19.1万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

1. 引入相关依赖

build.gradle.kts 文件中添加 Spring Security 依赖:

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-security")
}

2. 编写配置类

创建一个配置类,例如 SecurityConfig.kt

package com.example.demo

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.http.HttpMethod
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
import org.springframework.security.config.http.SessionCreationPolicy
import org.springframework.security.core.userdetails.User
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.provisioning.InMemoryUserDetailsManager

@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {

    @Bean
    override fun userDetailsService(): UserDetailsService {
        val user: UserDetails =
            User.withDefaultPasswordEncoder()
               .username("user")
               .password("password")
               .roles("USER")
               .build()

        return InMemoryUserDetailsManager(user)
    }

    override fun configure(http: HttpSecurity) {
        http
           .httpBasic()
           .and()
           .authorizeRequests()
               .antMatchers(HttpMethod.GET, "/public/**").permitAll()
               .anyRequest().authenticated()
               .and()
           .sessionManagement()
               .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    }
}

上述配置类做了以下几件事:

  • userDetailsService 方法定义了一个内存中的用户信息,包含用户名、密码和角色。
  • configure 方法配置了 HTTP Basic 认证,允许所有对 /public/** 的 GET 请求,其他请求需要认证。同时设置会话管理为无状态。