MST

星途 面试题库

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

在Java Spring Boot项目里,描述一下实现基于用户名和密码的基本身份验证的步骤,包括相关的依赖引入、配置文件设置以及必要的Java代码片段。
39.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 引入依赖

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 配置文件设置

application.properties文件中可以配置一些简单的安全相关属性,例如关闭csrf保护(生产环境不建议):

spring.security.csrf.enabled=false

3. Java代码片段

创建一个配置类来配置Spring Security:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.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
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
           .authorizeRequests()
               .antMatchers("/", "/home").permitAll()
               .anyRequest().authenticated()
               .and()
           .formLogin()
               .loginPage("/login")
               .permitAll()
               .and()
           .logout()
               .permitAll();
    }

    @Bean
    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user =
            User.withDefaultPasswordEncoder()
               .username("user")
               .password("password")
               .roles("USER")
               .build();

        UserDetails admin =
            User.withDefaultPasswordEncoder()
               .username("admin")
               .password("admin")
               .roles("ADMIN")
               .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

上述代码中:

  • configure(HttpSecurity http)方法定义了哪些请求需要认证,哪些可以直接访问,以及配置了登录和注销页面。
  • userDetailsService()方法创建了内存中的用户,实际应用中应该从数据库等持久化存储中获取用户信息。