잠시 자바 기초 공부하느라 ㅜㅜ 스프링시큐리티를 하지 못했다 다시 시작하자.. ㅠ
오늘은 사용자를 데이터베이스에 저장 하는거 까지 했다 오늘은 데이터베이스 사용자의 권한정보를 등록 하고 연동 해보는 작업을 해보자!
Spring Security 5.0 이전에는 기본 PasswordEncoder 가 평문을 지원하는 NoOpPasswordEncoder
- 암호화 포맷 : {id}encodedPassword
- bcrypt, noop, pbkdf2, scrypt, sha256 (기본 포맷은 Bcrypt : {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG)
- 생성
- PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder()
- 인터페이스
- 패스워드 암호화
- 패스워드 비교
- encode(password)
- matches(rawPassword, encodedPassword)
저번 포스팅에서는 직접 메로리에 권한설정과 인층처리를 해줬다
데이터베이스에 사용자를 조회 하고 조회한 정보를 통해서 인증처리가 이루어지도록 진행하겠다
AccountContext,CustomerUserDetailsService
데이터 계층으로 부터 유저 객체를 조회한 다음에 반환 할때 UserDetails 타입으로 반환해야하기 때문에
User Details의 인터페이스를 구현 하고자 만들었다.
UserDetailsService 인터페이스를 구현해보자 먼저 데이터 계층으로 부터 Account객체를 먼저 얻어오자! Reposiroty 에서 Accoun객체를 리턴 받으니까 ? 가져오면되겠징? 가져오자 !
여기서 Account 객체가 만약 널이면 throw new UsernameNotFoundException 발생해서 인증에 실패하게끔 해줬다.
널이 아니면 최종적으로 UserDetailsService 타입의 객체를 반환할것이다. 자 그러면 크래스를 만들어보자!
UserDetails 인터페이스를 확인해보면 아이디와,비밀번호,권한정보 등을 참조할수 있도록 되어있다.
UserDetails 를 구현한 구현체가 User 클래스이다 그러면 난 User클래스를 상속 받아서 사용하겠다. 그러면 UserDetails타입으로 반환된다.
자세하건 앞에 포스팅이 되어 있으니 참고 하도록 하자!
Account 객체를사용해서 전달할건데, 나중에 참조 할수 있도록 멤버 변수로 하나 만들어 놓자
여기서 조금 시간이 걸렸다 .. 난 난 난 난 !! 분명 security User를 상속받은지 알았다.. 어쩐지 컴파일 에러가 계속 나서 혹시나 싶어서 확인해봤다 ㅋㅋ 이런실수 하지 않기로하자
AccountContext 객체를 인스턴스 해주고 account 와 권한 정보를 넣어줘야한다 기본적으로 ROLE_USER 권한으로 저장된다
AccountContext 매게변수는 Account타입과 권한정보를 담을수 있는 컬렉션 타입이다! 자 ! 그러면 여기에서도 컬렌션 타입인 List로 권한정보를 만들어서 전달해주자 마지막으로 accountContext 를 리턴해주자
인증처리를 할때 필자가 만든 유저디테일 서비스 구현체를 호출해서 참조를 하게되고 직접 db와 연동될수 있도록 해준다
위에서 만든 클래스를 사용하기 위해서 AuthenticationManager를 오버라이드 하자 이렇게 되면 필자가 만든 클래스로 인증처리를 하게된다.
그리고 ROLE_USER가 아니라 DB 에서 Account객체를 얻기 때문에 ROLE_USER가 아니라 Account.getRole를 이용해서 사용자의 권한정보를 가져온다
디버깅을 통해서 확인해보자 필자는 현재 유저 정보와 패스워드 이름 이메일 권한을 다 등록한 상태이다
필자는 유저와 매니저 2명을 만들어줬다 유후 ~ 각각 아이디별로 권한을 확인할수
있다.
이번에는 참 어이 없는 실수를 한거 같다
db에서 오토 커밋이 안되어 있는 상황에서 자꾸 로그인이
안되서.. 허허 ㅋㅋㅋㅋ 이런 똥멍청이 같구나.. 2시간을 소비했다 뭔가 싶어서 ... 하하 결국 쿼리를 직접 작성해서 커밋해부렸다.
이 모든 과정이 개발자가 되기 위한 과정이라고 생각하자 ㅋ ㅋ
'SpringSecurity' 카테고리의 다른 글
SpringSecurity( 커스텀 로그인 페이지 생성하기) (0) | 2020.11.25 |
---|---|
SpringSecurityAuthenticationProvider(DB 연동 인증 처리2) (0) | 2020.11.23 |
SpringSecurity(사용자 DB등록 및 PasswrodEncoder) (0) | 2020.11.15 |
SpringSecurity 프로젝트 구성 (0) | 2020.11.13 |
SpringSecurity(아키텍처 정리) (0) | 2020.11.11 |