[기초 API 구현 2] - 로그인 / 로그아웃

박성규·2022년 5월 27일
0

[스프링 부트]

목록 보기
26/38
post-thumbnail
  1. WebSecurityConfig
...

.loginProcessingUrl("/user/login")

...

logoutUrl("/user/logout")

...

2.UserDetailsServiceImpl

package com.spring.loginprac.security;

import com.spring.loginprac.model.Users;
import com.spring.loginprac.repository.UserRepository;
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 org.springframework.stereotype.Service;

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    private final UserRepository userRepository;

    @Autowired
    public UserDetailsServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Users user = userRepository.findByUsername(username)
                .orElseThrow(() -> new UsernameNotFoundException("Can't find " + username));

        return new UserDetailImpl(user);
    }
}

3.UserDetailImpl

package com.spring.loginprac.security;

import com.spring.loginprac.model.Users;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.Collections;

public class UserDetailImpl implements UserDetails {
    private final Users user;

    public UserDetailImpl(Users user) {
        this.user = user;
    }

    public Users getUser() {
        return user;
    }

    @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;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Collections.emptyList();
    }
}

스프링 시큐리티의 강력한 기능이라고 생각한다.
시큐리티에 기본 저장되어있는 로그인 관련 인터페이스를 implements 한 후
형식에 따라 코드를 작성해 준다.

0개의 댓글

관련 채용 정보