728x90
반응형
SMALL
MyBatis로 가져온 MemberVO 정보를 스프링 시큐리티 타입에 맟춰서 사용할려면 UserDetails 타입으로 변환해야한다.
변환을 해줘야지만이 스프링 시큐리티를 사용할 수 있다.
1.User
UserDetails의 구현클래스인 User 클래스를 확장받아 변환을 진행할것이다.
CustomUser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@Getter
public class CustomUser extends User{
private static final long serialVersionUID = 1L;
private MemberVO member;
public CustomUser(String username, String password, Collection<? extends GrantedAuthority> authorities) {
super(username, password, authorities);
}
public CustomUser(MemberVO vo) {
super(vo.getUserid(), vo.getUserpw(), vo.getAuthList().stream().map(auth -> new SimpleGrantedAuthority(auth.getAuth())).
collect(Collectors.toList()));
this.member = vo;
}
}
|
cs |
UserDetails 인터페이스를 구현하는 방법도 있으나 기존의 클래스를 수정하지 않고 확장하는 방식으로 진행한다.
12행: MemberVO를 파라미터로 전달해서 User 클래스에 맞게 생성자를 호출
14행: AuthVO 인스턴스는 SimpleGrantedAuthority(스프링시큐리티 권한 객체)로 변환하여 처리
17행: 변환된 값을 저장
CustomUserDetailsService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@Log4j
public class CustomUserDetailsService implements UserDetailsService{
@Setter(onMethod_ = {@Autowired})
private MemberMapper memberMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
log.warn("Load User By UserName : "+username);
MemberVO vo = memberMapper.read(username);
log.warn("queried by member mapper: " + vo);
return vo == null ? null : new CustomUser(vo);
}
}
출처: https://pulpul8282.tistory.com/151 [기억의 파편들]
|
cs |
8행: loadUserByUsername()은 내부적으로 MemberMapper를 이용해서 MemberVO를 조회하고
MemberVO는 우리가 이미 CustomUser 클래스에서 CustomUser(스프링-시큐리티)타입으로 변환을 했기때문에 동작이 가능하다.
728x90
반응형
LIST
'SPRING > 스프링-시큐리티' 카테고리의 다른 글
스프링-시큐리티 인증 절차 정리 (0) | 2021.06.30 |
---|---|
스프링MVC-시큐리티-OAUTH2 로 네이버아이디 로그인 하기(소셜로그인) (0) | 2021.06.29 |
스프링-시큐리티 CSRF 토큰설정을 통한 CRUD 처리(3) (0) | 2021.05.08 |
스프링 시큐리티- 인증 절차 인터페이스 구현 UserDetails, UserDetailsService(1) (0) | 2021.05.07 |