
1.의의
스프링 시큐리티의 UserDetailService를 구현하여 사용자 상세 정보를 얻어 오는 메서드를 재정의 한다.
UserDetailsService
UserDetails
2.설정
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(**AuthenticationManagerBuilder auth**) throws Exception {
auth.userDetailsService(customUserDetailsService())
.passwordEncoder(passwordEncoder());
}
...
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
//
@Bean
public UserDetailsService customUserDetailsService() {
return new CustomUserDetailsService();
}
}
2.유저 상세 정보 가져오기
package org.hdcd.common.security.service;
import org.hdcd.common.security.domain.CustomUser;
import org.hdcd.domain.Member;
import org.hdcd.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CustomUserDetailsService **implements UserDetailsService** {
@Autowired
private MemberMapper memberMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//username은 사용자명이 아니라 사용자 아이디를 의미한다.
log.info("Load User By Username : " + username);
Member member = memberMapper.readByUserId(username);
log.info("queried by member mapper: " + member);
return member == null ? null : new CustomUser(member);
}
}