inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티

2) 사용자 정의 보안 기능 구현

spring boot 관련 질문입니다.

376

david1403

작성한 질문수 1

0

안녕하세요. security class 설정을 SecurityConfig class 와 application.properties 에 나눠서 하고 있는데,

혹시 @Configuration 과 application.properties 를 통한 설정의 차이는 무엇인가요?

감사합니다.

java spring-boot Spring Security

답변 4

2

정수원

일단 계정을 생성하는 예를 기준으로 해서 설명하겠습니다.

스프링 부트에서는 application.properites 에 값을 설정하게 되면 원하는 설정클래스를 만들어서 읽어드려 사용할 수 있습니다.

가령 application.properites 에

spring.security.user.name=leaven 라고 되어 있다면 아래와 같이 클래스를 생성할 수 있습니다.

@ConfigurationProperties(prefix = "spring.security.user")
public class SecurityProperties {

private String name

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}
}
@ConfigurationProperties(prefix = "spring.security.user")

보시면 prefix 에 해당하는 값을 제외한 name 값에 해당하는 "leaven"을 얻을 수 있습니다.

실제로 스프링 시큐리티에도 SecurityProperties 클래스가 있고 초기화 시 이 클래스를 사용해서 사용자 계정을 생성하고 있습니다.

@Lazy
public InMemoryUserDetailsManager inMemoryUserDetailsManager(SecurityProperties properties,
ObjectProvider<PasswordEncoder> passwordEncoder) {
SecurityProperties.User user = properties.getUser();
List<String> roles = user.getRoles();
return new InMemoryUserDetailsManager(
User.withUsername(user.getName()).password(getOrDeducePassword(user, passwordEncoder.getIfAvailable()))
.roles(StringUtils.toStringArray(roles)).build());
}
inMemoryUserDetailsManager(SecurityProperties properties) : DI 하고 있습니다.

그리고 중간쯤에 보시면

SecurityProperties.User user = properties.getUser();

user 객체를 얻어와서 계정을 생성하는 로직을 구현하고 있습니다. 

이것이 application.properites 를 사용하는 방식입니다.

또 하나는 SecurityConfig 와 같은 설정클래스에서 계정을 생성하는 방식인데

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("{noop}1111").roles("USER");
}

와 같이 할 수 있습니다.

스프링 시큐리티에서는 두가지 방식을 모두 지원하는데 만약 동시에 두가지 방식으로 설정을 한 상태이면 첫번째 방식은 무시되고 두번째 방식으로  계정을 생성합니다. 즉 우선순위가 SecurityConfig 설정이 더 높습니다.

만약 SecurityConfig 에서 별도의 설정을 하지 않는다면 application.properties 에서 읽어드려 계정을 생성하고 application.properties 에도 아무런 설정을 하지 않는다면 스프링 시큐리티가 SecurityProperties 클래스에 기본적으로 생성되는 user 정보를 가지고 계정을 제공합니다.

기본적으로 제공되는 계정 정보는 username 은 "user" 이고 password 는 랜덤한 UUID 입니다.

0

귀여운 수달

spring.security.user.name=hyuk

0

귀여운 수달

는 강의 뒤편에 강사님이 하셨네요 ㅎㅎ.. 

0

귀여운 수달

0

david1403

친절한 답변 정말 감사합니다. 많은 도움이 되었습니다 :)

시큐리티 공부 버전 질문

0

175

1

[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈

0

186

1

AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우

0

174

1

강의 코드가 왜이렇게 뒤죽박죽인가요...

0

249

1

메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..

0

236

1

파라미터값이 넘어가지 않습니다 ....

0

374

1

security filterChain 설정 질문이 있습니다.

0

331

1

소스 부분 질문 드립니다.

0

208

2

섹션4 7번 강의 문제가 있는거 같네요.

0

344

2

파일이 수시로 이름이 바껴있네요 ㄷㄷ

0

304

1

HttpSessionSecurityContextRepository를 사용안하는 문제

0

555

2

error , exception 이 잘 안됩니다.

0

281

2

thymeleaf tag 질문합니다.

0

196

2

버전업하면서 deprecated된 것들이 너무많아요

0

478

1

spring security 패치 관련

0

437

1

모바일을 사용할때 토큰말고 세션

0

846

2

DB 연동한 인가 부분에 대한 질문입니다!

0

264

1

Ajax방식도 똑같이 Session방식을 사용하는건가요?

0

307

1

Config 파일 생성 시 질문이 있습니다.

0

225

1

강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..

1

429

2

403 에러 뜹니다.

0

813

2

login_proc의 존재에 대한 간략한 설명입니다

0

276

1

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

0

282

2

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

0

189

1