스프링 시큐리티를 이용해서 로그인을 하는데
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를 치니까 역시나 나같은 사람들이 많았고
여기에 해답이 있었다.
<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"); 을 추가해주면 된다.
'Spring' 카테고리의 다른 글
[질문]많은 필드를 가진 서비스 클래스 어떻게 해결해야 할까요? (0) | 2019.12.28 |
---|---|
Service Layer Testing in Spring Boot (feat. Mockito) (0) | 2019.12.28 |
[Error] JPA를 이용한 테이블 생성후 외래키 있는 테이블 insert할 때 에러 (MyISAM , InnoDB) (0) | 2018.12.08 |