๋ก๊ทธ์ธ ์ธ์ฆ์์ฒญ ์คํจ

์๋์ ๊ฐ์ ์์ธ ๋ฐ์

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.codestates.auth.dto.LoginDTO` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('username')
at [Source: (org.apache.catalina.connector.CoyoteInputStream); line: 1, column: 1]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) ~[jackson-databind-2.13.3.jar:2.13.3]

๊ธฐ๋ณธ์์ฑ์๊ฐ ์์ด์ ๋ฐ์ํ๋ ์ค๋ฅ๊ฐ ๋ง๋? ๋ํดํธ ์์ฑ์๋ ๋ณ๋ ์์ฑ์๊ฐ ์์ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ถ๊ฐํด์ฃผ๋ ๊ฒ์ผ๋ก ์๊ณ ์๋๋ฐ.

ํน์ ๋ชจ๋ฅด๋๊น ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ถ๊ฐํด์ฃผ๋๋ก ํ์.

์ด๋ฒ์ ๋ค๋ฅธ ์์ธ๊ฐ ์ถ๋ ฅ๋์๋ค. : successfulAuthentication()์์ Authentication ๊ฐ์ฒด์ MemberDetails ๊ฐ์ฒด ์ ๋ณด๊ฐ ๋ด๊ธฐ์ง ์์์ ๋ฐ์ํ๋ ํ๋ณํ ์์ธ

java.lang.ClassCastException: class java.lang.String cannot be cast to class com.codestates.member.entity.Member
(java.lang.String is in module java.base of loader 'bootstrap'; com.codestates.member.entity.Member is in unnamed module of loader 'app')
java.lang.ClassCastException: class java.lang.String cannot be cast to class com.codestates.member.entity.Member
- String ํด๋์ค๋ฅผ Member ์ํฐํฐ๋ก ํ๋ณํํ ์ ์๋ค๊ณ ํ๋ค.
JwtAuthenticationFilter.java:55

Member member = (Member) authResult.getPrincipal();ใ
ก๊ณผ์ ์์ ํ๋ณํ ์์ธ๊ฐ ๋ฐ์ํ๋ค. authResult๊ฐ String์ด๋ผ Member๋ก ๋งคํํ์ง ๋ชปํ๋ค๋ ๋ป ๊ฐ์๋ฐ getPrincipal()์ ๋ฐํํ์
์ ์๋ ๋ฌด์์ผ๊น?
์ฐพ์๋ณด๋ ์๋๋ Object ํ์
์ผ๋ก ๋ฐํ๋์ด์ผ ํ๋ค๊ณ ํ๋ค.
์ด๋์ ๋ฌธ์ ๊ฐ ์์๊น?
๋ ํผ๋ฐ์ค ์ฝ๋์์ Member member = (Member) authResult.getPrincipal();๋ฅผ ๋๋ฒ๊น
ํด๋ณด๋ฉด MemberDetailsService๊ฐ ๋ง๋ MemberDetails ๊ฐ์ฒด๊ฐ ์กด์ฌํจ์ ์ ์ ์์ง๋ง, 

๋ด ์ฝ๋์์ Member member = (Member) authResult.getPrincipal();๋ฅผ ๋๋ฒ๊น
ํด๋ณด๋ฉด

principal ํ๋์ MemberDetails ๊ฐ์ฒด๊ฐ ์๋ username๋ง ๋ณด์ ํ๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฌธ์ ์ ์์ธ์ ์ฐพ์๋ดค๋๋ MemberDetailsService ํด๋์ค์ @Component๊ฐ ์๋ถ์ ๊ฒ์ ํ์ธํ ์ ์์๋ค.

๋ค์ @Component๋ฅผ ๋ถ์ฌ์ฃผ์๋ค.
๊ทธ๋๋ ์ฌ์ ํ ํด๋น ํํธ(2๏ธโฃ ๋ก๊ทธ์ธ ์ธ์ฆ ์์ฒญ)์์ ์์ธ๊ฐ ์ถ๋ ฅ๋๋ค.


์ฌ์ ํ principal์ MemberDetailsService์์ ๋ฐํํ๋ MemberDetails๊ฐ ์ถ๋ ฅ๋์ง ์๋๋ค.
๋ค์ ๋ณด๋ ๋ด ์ฝ๋์์๋ MemberDetailsService๊ฐ UserDetailsService๋ฅผ ๊ตฌํํ์ง๋ ์์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.

๋ค์ UserDetailsService๋ฅผ ๊ตฌํํ๊ณ ๋๋ฒ๊น
ํด๋ณด์.

์ฌ์ ํ ๊ฐ์ ์ค๋ฅ๊ฐ ์ถ๋ ฅ๋๋ค.

๋ก๊ทธ์ธ DTO๋ก๋ถํฐ ๋๋ฒ๊น
์ ๋๋ ค๋ณด๋

return authenticationManager.authenticate(authenticationToken);ํ๋ ๊ฒ์ด ์๋ return authenticationToken์ด attemptAuthentication()์ ๊ฒฐ๊ณผ๋ก ๋์ด๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.

โญ์ธ์ฆํ ํฐ์ด AuthenticationManer์ authenticate๋ฅผ ๊ฑฐ์ณ์ ๋ฐํ๋๋๋ก ๋ค์ ์์ฑํด์คฌ๋ค.


๋๋์ด ์ ์์ ์ผ๋ก ๊ฐ์ด ์ ๋ฌ๋๋๊ฒ์ ํ์ธํ ์ ์์๋ค.