개발자의 길

Spring Security 에서 중복로그인 옵션이 안될 때 본문

4. JAVA

Spring Security 에서 중복로그인 옵션이 안될 때

자르르 2023. 3. 29. 17:37


spring security 의 설정중에 중복 로그인을 막는 설정이 있다.

 

찾아보면, 

sessionManagement
maximumSessions
maxSessionsPreventsLogin
expiredUrl
sessionRegistry

뭐 이런 설정을 하라고 나와있을 거다.

 

그런데, 설정 하라는대로 다 했는데 안되면 막막하다.

 

우리가 로그인쪽에 셋팅한 부분에서

 

implements UserDetailsService 를 설정한 파일에

@Override
public UserDetails loadUserByUsername(String loginId) throws UsernameNotFoundException {
    return ~~~
}

이런 소스가 있을거다.

기본적으로 springsecurity는 

유저 정보를 User 객체(spring security가 제공)를 사용하게끔 되어있는데, 대부분이 이걸 안쓰고,

커스텀한 본인들 db에 맞는 사용자 DTO를 따로 만들어서 사용할 것이다.

 

그렇다면, security에서 로그인후에 중복 로그인인지 아닌지, 체크를 어떻게 할까..

 

원래 User 객체를 썻으면, 같은 사용자인지 구분이 가능한데, custom User 객체를 사용했으면, 객체끼리의 비교를 통해서 같은 유저인지 확인 할 방법을 정의해야 한다.

 

그래서 Custom User Dto에 equals와 hashCode를 override 해서 같은 객체인지 비교를 재정의 해야한다.

 

@Override
public boolean equals(Object obj) {
    if(obj instanceof LoginDto) {
        return this.loginId.equals(((LoginDto) obj).loginId);
    }

    return false;
}

@Override
public int hashCode() {return this.loginId.hashCode();}

나는 기본적으로 loadUserByUserName 에서 LoginDto를 가져왔다. 그래서 

LoginDto 가장 하단에 위 소스를 추가해주었다.

 

본인들의 셋팅에 맞게 약간만 수정해서 사용하면, 중복 로그인 방지가 작동하는걸 확인할 수 있다.

'4. JAVA' 카테고리의 다른 글

[springboot] java mail 보내기  (0) 2023.05.24
[Springboot] 다중 DB(database) 연결-custom annotation으로  (0) 2023.04.14
[java] Stream 문법  (0) 2023.03.23
Springboot EhCache 사용  (0) 2023.02.23
SpringBoot 기본 Cache 기능  (0) 2023.02.23


이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments