Wanna be Brilliant Full-Stack Developer
SpringBoot 로그인 2 본문
목표
UserDetailsService를 완성해보려고한다!
어제 우리는 IOC에 있는 UserdetailsService가 아니라 로그인 진행할떄 내가 만든 PrincipalDetailsService 실행되게끔 하는것은 성공했다.
package com.cos.photogramstart.config.auth;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.cos.photogramstart.domain.user.UserRepository;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Service // 어노테이션 붙이는 순간 IOC가 된다.
public class PrincipalDetailsService implements UserDetailsService {
private final UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
System.out.println("나 실행돼?" + username);
return null;
}
}
이제는 안에 구현을 하면되는데!
우리는 여기서 궁금할수 있는점은 username만 있고 패스워드는 없으니까 문제가 생기는것이 아닌가?
하지만 패스워드는 시큐리티가 알아서 비교해주고 처리해준다!
우리가 해야할것은 username의 여부를 체크하는것이다
확인 하기 위해서는 UserRepository가 필요하다 유저DB에 있는지 물어볼수있다.
JPA Query Method 라는것은 또 무엇인가?
package com.cos.photogramstart.domain.user;
import org.springframework.data.jpa.repository.JpaRepository;
// 어노테이션이 없어도 JpaRepository를 상속하면 IoC등록이 자동으로 된다.
public interface UserRepository extends JpaRepository<User, Integer>{
// JPA query method!
User findByUsername(String username);
}
User object를 찾아서 리턴해줄것이다!
PrincipalDetails가 세션에 저장될떄 userEntity 들고 있으니까 세션에 저장된 user object데이터를 활용할수 있다.
package com.cos.photogramstart.config.auth;
import java.util.ArrayList;
import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import com.cos.photogramstart.domain.user.User;
import lombok.Data;
@Data
public class PrincipalDetails implements UserDetails{
private static final long serialVersionUID = 1L;
private User user;
public PrincipalDetails(User user) {
this.user = user;
}
// 권한: 한개가 아닐 수 있음. (3개 이상의 권한)
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> collector = new ArrayList<>();
collector.add(() -> { return user.getRole();});
return collector;
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
다시한번 강의를 통해 나중에 이해할 필요가있음!
로그인 하였을떄 404가 뜬다는것은 무엇이냐면 /는 인증이 필요한 페이지이다.
/를 하였는데도 404로 간 이유는 인증이 되었기 때문이다!
어떤것을 입력하여도 인증이 되있는 상태로 로그인이 유지되어지는데
로그아웃/logout을 통해서도 내가 로그인이 되었다는것을 확인할수 있다.
'Back-End > Spring Boot' 카테고리의 다른 글
SpringBoot 회원정보수정 security-taglibs (0) | 2022.02.12 |
---|---|
SpringBoot 로그인 View (0) | 2022.02.11 |
SpringBoot 로그인1 UserDetailsService (0) | 2022.02.10 |
SpringBoot 공통응답 Script 만들기! (0) | 2022.02.10 |
SpringBoot 공통 응답 DTO 만들기 (0) | 2022.02.10 |