본문 바로가기

Server/Spring

[우당탕탕 개발일지] 로그인 가능한 사용자 계정 추가하기 & PasswordEncoder

반응형
SMALL

우당탕탕 강의를 들으며 코드를 작성해가는 중입니다 ㅇㅁㅇ ..!! 오늘의 문제 발생

 

  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
      .withUser("user").password("{noop}user123").roles("USER")
      .and()
      .withUser("admin").password("{noop}admin123").roles("ADMIN")
    ;
  }

어제와 다름 없이 사용 중지된 Adapter에서 오버라이딩 하여 inMemoryAuthentication() 이라는 메서드를 사용하여 사용자와 관리자 계정을 추가했다. 그래서 대체 방안이 필요했다.

 

    @Bean
    public UserDetailsService userDetailsService() {
        User.UserBuilder userBuilder = User.withDefaultPasswordEncoder();

        UserDetails user = userBuilder
                .username("user")
                .password("user123")
                .roles("USER")
                .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
                .username("admin")
                .password("{noop}admin123")
                .roles("ADMIN")
                .build();

        return new InMemoryUserDetailsManager(user, admin);
    }

Bean으로 등록한다! UserBuilder에 withDefaultPasswordEncdoer() 메서드를 추가해서 계정을 추가한 후, InMemoryUserDetailManager로 넘겨줌으로써 대체할 수 있었다.

 

 

 

In-Memory Authentication :: Spring Security

In the following sample, we use User.withDefaultPasswordEncoder to ensure that the password stored in memory is protected. However, it does not protect against obtaining the password by decompiling the source code. For this reason, User.withDefaultPassword

docs.spring.io

In-Memory Authentication과 관련하여 공식 문서를 참고할 수 있었다.

 

 

하지만 여기서 문제 발생 !

 

withDefaultPasswordEncdoer 도 중지되었다. 와우 !~!

 

 

다시 찾아보니 PasswordEncoder도 빈으로 따로 등록주어야 했다.

 

 

 

Spring Boot: How to specify the PasswordEncoder?

Currently I got the main class: package com.recweb.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @

stackoverflow.com

위 글을 참고해서 PasswordEncoder을 NoOpPasswordEncoder로 반환하고자 했다. (미션의 조건이었기 때문에)

 

??? 근데 NoOpPasswordEncoder도 중지되었다고 한다. ((뭥미))

 

@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

그래서 그냥 디폴트 값으로 PasswordEncoder를 가져오도록 처리했다.

 

 

 

[security] 4. PasswordEncoder 설정하기

PasswordEncoder 설정하기 기존의 {noop} 문자열을 더해줘서 Password encoding 하던 것을 Spring Security가 지원해주는 PasswordEncoder를 사용해보겠습니다. Bean 등록 Application.java @SpringBootApplication public class Applica

dev-alxndr.tistory.com

 

 

Multiple markers at this line - The type NoOpPasswordEncoder is deprecated - The method getInstance() from the type NoOpPassword

I am working on Spring Cloud + Boot example. In this example I am looking to do SSO. When I run this application, I get the response fine, but looks like Multiple markers at this line - The

stackoverflow.com

위에 두 곳을 유용하게 참고했다. ㅎㅁㅎ

 

 

수정한 코드 전체

@Bean
public UserDetailsService userDetailsService() {
    UserDetails user = User.builder()
            .username("user")
            .password(passwordEncoder().encode("user123"))
            .roles("USER")
            .build();

    UserDetails admin = User.builder()
            .username("admin")
            .password(passwordEncoder().encode("admin123"))
            .roles("ADMIN")
            .build();

    return new InMemoryUserDetailsManager(user, admin);
}

@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

 

 

잘 나온다 ㅠㅠ ((눙물))

반응형
LIST