#1. security 시작

2025. 4. 16. 10:58·spring/security

1. 의존성 주입

  implementation 'org.springframework.boot:spring-boot-starter-security'

이렇게 주입만 해도 자동으로 설정된 보안 기능이 구동된다.

페이지를 제공

SecurityProperties 클래스에서 한 개의 계정을 제공하는데

username: user

password: 랜덤문자열

이다.

 

SecurityProperties 에서 만들어진 계정은 UserDetailServiceAutoConfiguration 클래스의 inMemoryUserDetailsManager 함수를 탄다 User 객체를 생성해서 관리한다.

  @Bean
  public InMemoryUserDetailsManager inMemoryUserDetailsManager(SecurityProperties properties, ObjectProvider<PasswordEncoder> passwordEncoder) {
    SecurityProperties.User user = properties.getUser();
    List<String> roles = user.getRoles();
    return new InMemoryUserDetailsManager(new UserDetails[]{User.withUsername(user.getName()).password(this.getOrDeducePassword(user, (PasswordEncoder)passwordEncoder.getIfAvailable())).roles(StringUtils.toStringArray(roles)).build()});
  }

 

SpringBootWebSecuriyConfiguration 클래스에 의해 자동 설정

 @ConditionalOnDefaultWebSecurity
  static class SecurityFilterChainConfiguration {
    SecurityFilterChainConfiguration() {
    }

    @Bean
    @Order(2147483642)
    SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
      http.authorizeHttpRequests((requests) -> ((AuthorizeHttpRequestsConfigurer.AuthorizedUrl)requests.anyRequest()).authenticated());
      http.formLogin(Customizer.withDefaults());
      http.httpBasic(Customizer.withDefaults());
      return (SecurityFilterChain)http.build();
    }
  }

하지만 아래의 조건이 충족돼야 실행된다

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.boot.autoconfigure.security;

import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.ConfigurationCondition.ConfigurationPhase;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

class DefaultWebSecurityCondition extends AllNestedConditions {
  DefaultWebSecurityCondition() {
    super(ConfigurationPhase.REGISTER_BEAN);
  }

  @ConditionalOnClass({SecurityFilterChain.class, HttpSecurity.class})
  static class Classes {
    Classes() {
    }
  }

  @ConditionalOnMissingBean({SecurityFilterChain.class})
  static class Beans {
    Beans() {
    }
  }
}

클래스패스에 SecurityFilterChain 과 HttpSecurity 가 있어야 하고 SecurityFilterChain bean 이 생성되지 않았어야 한다

'spring > security' 카테고리의 다른 글

#2. SecurityBuilder 와 SecurityConfigurer  (0) 2025.04.16
1. 스프링 시큐리티 초기화를 따라가보자  (0) 2025.01.10
'spring/security' 카테고리의 다른 글
  • #2. SecurityBuilder 와 SecurityConfigurer
  • 1. 스프링 시큐리티 초기화를 따라가보자
tokkaiiii
tokkaiiii
java 웹개발 로그
  • tokkaiiii
    tokkaiiii's 개발일지
    tokkaiiii
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • java (1)
      • project tool (1)
        • jira (1)
      • spring (9)
        • security (3)
        • database access (2)
        • batch (4)
      • Kafka (2)
      • CICD (2)
      • Oracle (0)
      • MSA (1)
      • 운영 (7)
        • 게시판 (7)
      • 앱 (1)
        • 플러터 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • tokkaiiii
  • 공지사항

  • 인기 글

  • 태그

    Flutter
    플러터
    앱개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
tokkaiiii
#1. security 시작
상단으로

티스토리툴바