티스토리 뷰

카테고리 없음

Spring Security (2)

evolutioning 2024. 10. 14. 13:39

(1)편에 이어서 2편을 작성하려한다.

2편은 AuthenticationProvider / Success,Failuer Handler를 다뤄보겠다.

 

AuthenticationProvider  : 실제 인증 처리

 

@Component
class CustomAuthenticationProvider : AuthenticationProvider{

    @Autowired
    private lateinit var mapper : CommonMapper

    override fun authenticate(authentication: Authentication?): Authentication {
    val userid = authentication?.principal.toString()
        val userpw = authentication?.credentials.toString()

        val logger = LoggerFactory.getLogger(this::class.java)
        mapper.getuserinfo(userid).also {user ->

            if(user?.userpw.equals(userpw)) {
                val authorities = listOf(SimpleGrantedAuthority("ROLE_USER"))
                return UsernamePasswordAuthenticationToken(userid,userpw,authorities)
            }else {
                throw BadCredentialsException("비밀번호 오류 : BadCredentialsException")
            }
        }
    }

    override fun supports(authentication: Class<*>): Boolean {
        return UsernamePasswordAuthenticationToken::class.java.isAssignableFrom(authentication)
    }

}

 

1) authencate : 사용자가 입력한 인증 정보

principal : 사용자 id

credentials : 사용자 pw 

 

2) mapper : 입력받은 id로 db를 조회해 계정정보의 유무를 판단한다.

SELECT
    ID      AS userid
    ,PW     AS userpw
    ,EMAIL  AS useremail
    ,NM     AS usernm
    ,MEMCODE AS memcode
FROM MEMBER
WHERE
    ID = #{userid}

**계정 정보 확인**

 

3) 계정정보를 확인하고, 입력받은 pw값과 db상의 pw를 비교해 일치여부에 따라

인증 / Exception발생으로 구분했다.

if(user?.userpw.equals(userpw)) {
    val authorities = listOf(SimpleGrantedAuthority("ROLE_USER"))
    return UsernamePasswordAuthenticationToken(userid,userpw,authorities)
}

UsernamePasswordAuthenticationToken :

(1) 인증 성공 시 반환되는 객체

(2) ROLE_USER이라는 권한을 부여한다. 

 

else {
    throw BadCredentialsException("비밀번호 오류 : BadCredentialsException")
}

비밀번호가 일치하지 않을 경우 BadCredentialsException 예외를 발생시킨다.

 

4)Support메서드

override fun supports(authentication: Class<*>): Boolean {
    return UsernamePasswordAuthenticationToken::class.java.isAssignableFrom(authentication)
}

AuthenticationProvider 인터페이스에서 필수로 구현되야하는 메서드.

Spring Security가 인증을 처리할 때 현재의 인증요청 처리를 위해 사용한다.

UsernamePasswordAuthenticationToken 타입으로 처리하기위해 작성했다.

 

**ID/PW를 이용해 인증할때만 Provider이 작동한다는 의미이고 다른형태의 인증토큰은 작동하지 않는다**

 

Handler는 (3)편에 다루겠다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함