본문 바로가기

SpringSecurity

SpringSecurity(사용자 DB등록 및 PasswrodEncoder)

반응형

 

 

 

사용자를 등록해보자! 

 

SecurityConfigs 클래스를 보자 이전 포스팅에서 권한설정을 해준것을 기억한다 그리고 webignore 설정도 해줬다 

passwrodEncoeder를 호출한다 사용자가 입력하는 비밀번호도 암호화 해주기 위해서다.

 

 

 

DB에 사용자가 등록될수 있도록 기능을 추가해도록 해보자

 

Account 클래스를 만들어주자 @어노테이션들이 있는데 이것들은 나중에 JPA 관련해서 포스팅을 하도록하자 

회원정보들을 데이터 베이스 에 저장하기 위해 Account테이블과 아이디, 이름 ,비밀번호 이메일 나이,권한  컬럼을 만들어주자

사용자가 입력한 값들을 받을수 있게 Dto 클래스를 만들어주자 

 

 

 

회원정보들을 저장하기 위해서 service 패키지와 repository 패키지를 만들어주자

 

 

UserService Interface를 만들어주고 서비스구현체를 만들어주자 그리고 UserRepository를 생성해주고 Jpa기술을 사용하고 있기 때문에 Jpa에서 제공하는 JpaRepository인터페이스를 상속받자 타입은 Account id 타입으로 생성해주자

이후에 서비스에서 repository를 @Autowired 해주자 그리고 createUser 메소드를 오버라이드 해서 Account 객체를 저장해주자 

 

 

 

 

 

컨트롤에 사용자의 정보를 담아서 디비에 저장할수 있도록 UserController에 추가해주자

회원가입 페이지랑 회원가입 이후에 저장되는 메소드를 추가하도록한다

 

 

AccountDto를 사용해서 정보들을 받고 회원가입하면 홈으로" redirect:/" 해줬다. 

여기서 보면 Dto를 받고 나서 Account로 옮기고 난이후에 디비에 저장해줘야한다!  ModelMapper를 이용해서 dto를 담고 entity 에 복사해주면된다.

 

마지막으로 비밀번호를 암호화 해줘야 한다

PasswordEncoder 를 이용해서 사용자가 입력한 비밀번호를 암호화 해줘야하기 때문에 ModelMapper를 이용해서 entity 복사해준 코드를 리턴 받는다. 현재는 평문이기 때문에 암호화 해주는과정이 필요하다. account.setPassword(passwordEncoder.encode(account.getPassword()

그다음에 Account 를 서비스로 전달하면 된다.

 

 

 

 

 


런타임 하게 되면 테이블과 컬럼이 만들어지는 것을 확인할수있다.  그럼 직접 회원가입을 해보자구 !

 

 

 

 

 

 

내가 입력한 이메일주소랑 아이디랑 비밀번호를 확안할수 있다 

 

 

 

비밀번호가 암호화 되는과정까지 확인할수 있다.

 

DB를 확인해보자

아주아주 올바르게 저장되어진 모습을 알수 있다.

 

 

 

위에서 사용했던 어노테이션에 대해 알아보려고 한다! 필자는 JPA 경험이 처음접해본 기술이라서 잘 모르지만 하나하나 차근차근.. 해나가면 될거라고 생각한ㄷ ..

 

@Entity 

  • 엔터티는 쉽게 말해 실체, 객체라고 생각할 수 있다.
  • 일반적으로 엔터티를 정의하는 개념들을 정리하여 나타내면 다음과 같이 볼 수 있다.
  • 엔터티는 사람, 장소, 물건, 사건, 개념 등과 같은 명사에 해당된다.
  • 엔터티는 업무상 관리가 필요한 것에 해당된다.
  • 엔터티는 저장 되기 위한 어떤 것(Thing)에 해당된다. 

 자세한 설명은 여기로 들어가면 알수 있다

https://rh-cp.tistory.com/78

 

https://deveric.tistory.com/54

 

@GeneratedValue

GeneratedValue는 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. 선택적 속성으로 generator strategy가 있다. strategy는 persistence provider가 엔티티의 주키를 생성할 때 사용해야 하는 주키생성 전략을 의미한다. 디폴트 값은 AUTO이다. generator SequenceGenerator TableGenerator 애노테이션에서 명시된 주키 생성자를 재사용할 때 쓰인다. 디폴트 값은 공백문자("")이다.

여기에서 더 많은 정보를 확인할수 있다.

 

 

 

 

 

 

 

강의를 보면서 직접 구현을 하고 있지만 강의처럼 한번에 안되더라... 뭐가 이렇게 설정 관련이 짜증나게 오류가 많이 나는지 .. ㅎ ㅏ..

 

이과정을 진행하면서 가자 힘들었던거는 EntityManager가 bean을 생성하지 못해서 많이 애먹었다 왜왜왜왜!! 똑같이강의를 보면서 진행했는데 왜 bean 이 만들어지냐고!! ㅋㅋ

 

구글링을 해본결과 일단 스프링 부트 자동 설정부터 이해를 했어야했다... 띠로리~~

 

Spring Boot의 빈 등록 방식은 두 단계에 걸쳐서 진행된다고 한다 
첫 번째로 ComponentScan으로 bean을 등록하고, 두 번째로 EnableAutoConfiguration으로 추가적인 bean들을 읽어서 추가하게 된다. 

 

@EnableAutoConfiguration은 auto configuration 기능을 사용하겠다는 설정이다

 @EnableAutoConfiguration을 설정하지 않는다면 auto configuration 을 사용하지 못하게 됩니다. 일반적으로 아래와 같이 @ComponentScan과 함께 사용된다.

 

 

@ComponentScan에 입력된 "io.security.corespringsecurity" 값은 component scan를 시작할 패키지 위치입니다. io.security.corespringsecurity 하위 모든 패키지를 component scan 범위로 잡겠다는 설정이다.

package 위치를 입력하지 않는다면 io.security.corespringsecurity.Application이 놓여진 패키지("io.security.corespringsecurity")가 기본 값으로 사용된다 여러 패키지 위치를 scan 대상으로 설정하는 것도 가능하다.

글의 시작점에서 설명했듯이 component scan을 통해서 모은 component들의 정보와 Spring Boot가 spring.factories 파일에 사전에 정의한 AutoConfiguration 내용에 의해 bean 생성이 진행된다.

 

 

만약 AutoConfiguration을 사용하지 않으려고 한다면 아래와 같이 exclude 설정을 하면 돤다.

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

 

위에 설명을 보면  @SpringBootApplication 이 어노테이션이 @ComponentScan @EnableAutoConfiguration을 포함하는데 왜 2개를따로 해주지 않으면 bean 생성이 안된다고 하는지 도통 이해를 못하겠다.... ㅠㅠ 내가 잘못이해하고 있는건가?..

 

 

 

 

반응형