본문 바로가기

[Spring Security] loadUserByUsername(String username)에서 username이 empty일 때

스프링 시큐리티를 이용해서 로그인을 하는데 

public class MemberDetailsService implements UserDetailsService {
public final MemberService memberService;

@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {

loadUserByUsername 메소드의 파라미터 email의 값이 넘어오질 않았다.

바로 구글에 loaduserbyusername username empty를 치니까 역시나 나같은 사람들이 많았고 


https://stackoverflow.com/questions/43978548/username-parameter-is-empty-in-loaduserbyusernamestring-username-spring-boot 

여기에 해답이 있었다.

<input type="email" class="form-control" placeholder="Email" name="email" autofocus="autofocus" >

문제는 로그인 폼에서 name을 email로 해줬었는데 email이 아니라 username으로 해줘야 제대로 전달된다.


하지만 나는 이름을 계속 email로 하고 싶었고 방법은 

@Override
public void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/members/login")
.loginProcessingUrl("/members/login").permitAll()
.defaultSuccessUrl("/")
.successHandler(successHandler())
.usernameParameter("email")

WebSecurityConfigurerAdapter를 상속받은 SecurityConfig의 configure에 

.usernameParameter("email"); 을 추가해주면 된다.