๋ฐ์ํ springsecurity17 [OAuth2] OAuth2 ๋ก๊ทธ์ธ ํ SuccessHandler ๊ตฌํ @RequiredArgsConstructor@Componentpublic class OAuth2SuccessHandler extends SimpleUrlAuthenticationSuccessHandler { public static final String REFRESH_TOKEN_COOKIE_NAME = "refresh_token"; public static final Duration REFRESH_TOKEN_DURATION = Duration.ofDays(14); public static final Duration ACCESS_TOKEN_DURATION = Duration.ofDays(1); public static final String REDIRECT_PATH = "/artic.. 2025. 5. 17. [OAuth2] ๋ด๊ฐ ๋ณด๋ ค๊ณ ๋ง๋ OAuth2 ํ๋ฆ ์ ๋ฆฌ ์๊ฐ ์์๋๋ก [1] ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ -> ์๋ฒ ์์ฒญ GET /oauth2/authorization/kakao Spring Security๊ฐ ํํฐ ์ฒด์ธ์์ ์ฒ๋ฆฌ,OAuth2AuthorizationrequestRedirectorFilter๊ฐ ๋์ [2] ์๋ฒ : OAuth2AuthorizationRequest ๊ฐ์ฒด ์์ฑOAuth2AuthorizationRequest authorizationRequest = OAuth2AuthorizationRequest .authorizationCode() .clientId("KAKAO_CLIENT_ID") .authorizationUri("https://kauth.kakao.com/oauth/authorize") .redirectUr.. 2025. 5. 16. [Spring Security] ์ฟ ํค vs ํค๋๋ก JWT ๋ณด๋ด๊ธฐ ์์ง๋ ๋ก๊ทธ์ธ์์ ๋ฒ์ด๋์ง ๋ชปํ ๋๊ทธ์น๋ง ๋๋ฌด ์ด๋ ค์.......์ด๊ฑฐ ์ด๋ ค์ํ๋๊ฑฐ ๋๋ง ๊ทธ๋ฐ๊ฑฐ ์๋๊ฒ ์ฐ?.. ์ํผ OAuth2 ์นด์นด์ค๋ก ๋ก๊ทธ์ธํ๋ ๋ถ๋ถ ํ๋ฆ์ ๊ณต๋ถํ๋ ์ค์,์ธ๊ฐ ์ฝ๋ ๋ฐ๊ณ -> ์์ธ์ค ํ ํฐ ๋ฐ๊ณ -> ์ฌ์ฉ์ ์ ๋ณด ์์ฒญํ๊ณ -> ๊ทธ ์ฌ์ฉ์ ์ ๋ณด๋ก JWT ํ ํฐ ๋ง๋ค๊ณ -> ๊ทธ ํ ํฐ์ ์ฟ ํค์ ๋ด์์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ธ๋ค-> ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์ฟ ํค๋ฅผ ๋งค ์์ฒญ์ ํฌํจํด์ ๋ณด๋ธ๋ค ๊น์ง๋ ์๊ฒ ๋๋ฐ,๊ทธ๋ผ ์ ๊ตณ์ด ์ฟ ํค๋ฅผ ์ธ๊น? ํ๋ ์๋ฌธ์ด ๋ค์์ ์ฟ ํค๋ผ๋๊ฒ,์ฌ์ฉ์๊ฐ ๋๊ตฐ์ง ๊ธฐ์ตํด์ค์ ๋ก๊ทธ์ธ์ ์ ์ง์ํค๊ณ ..์ด๋ฐ ์ฅ์ ์ด ์๋ค๊ณ ๋ค์๋๋ฐ,์ง๊ธ๊น์ง์ ํ๋ฆ์ ๋ณด๋ฉด ์ด ์ฟ ํค์ ์ฅ์ ์ด ํ์ฉ๋๋๊ฒ ์ด๋์๋ ์์ด๋ณด์. ๊ทธ๋์ ์์๋ดค๋๋ฐ,์์ฝํ์๋ฉด ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์์ ๋ณด์๊ณผ, ๊ฐ๋ฐ์ ํธ์์ฑ ๋๋ฌธ์ด๋ผ๊ณ ํจ. Authorizat.. 2025. 5. 15. [OAuth2] OAuth2 ์ฌ์ฉ์ ์๋น์ค ๊ตฌํํ๊ธฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์กฐํํด์, ์ ์ ํ ์ด๋ธ์ ์ ๋ณด๊ฐ ์๋ ์ฌ์ฉ์๋ผ๋ฉด๋ฆฌ์์ค ์๋ฒ์์ ์ ๊ณตํด์ฃผ๋ ์ด๋ฆ์ ์ ๋ํด์ค. ์ ์ ํ ์ด๋ธ์ ์ ๋ณด๊ฐ ์๋ ์ฌ์ฉ์๋ผ๋ฉด์ ์ฌ์ฉ์๋ฅผ ์์ฑํด์ DB์ ์ ์ฅ @Table(name = "users")@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getter@Entitypublic class User implements UserDetails { // ์๋ต // ๋๋ค์ ํ๋ ์ถ๊ฐ @Column(name = "nickname", unique = true) private String nickname; // ๋น๋ ํจํด์ ๋๋ค์ ์ถ๊ฐ @Builder public User(String email, String .. 2025. 5. 11. [Java] ์๋ฐ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ๊ฐ ๋ญ๊น?ObjectMapper ํด๋์ค ObjectMapper ํด๋์ค๊ฐ ๋ค์ด๊ฐ ์ค์ต ์ฝ๋๊ฐ ์๊ธธ๋ ๊ถ๊ธํด์ ์์๋ดโโโObjectMapper ํด๋์ค ํตํด์ ๋ง๋ ๊ฐ์ฒด๋,โ์๋ฐ ๊ฐ์ฒด -> Json๊ฐ์ฒด (์ง๋ ฌํ)Json๊ฐ์ฒด -> ์๋ฐ ๊ฐ์ฒด (์ญ์ง๋ ฌํ)ํ ๋ ์ฐ์ HTTP์์๋ JSON์ ์ฐ๊ณ JAVA์์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํจโ๊ทธ๋ ๋ค๋ฉด ์๋ก ํ์์ ๋ง๊ฒ ๋ณํํ๋ ๊ณผ์ ์ด ํ์์ ์.โ๊ทธ๋ฐ ์์ ์ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ ๋ผ๊ณ ํ๋๊ฑฐ์(์ด๋ฆ์ด ๊ดํ ์ด๋ ค์..)โโ์๋ฅผ๋ค์ดโ์๋ฐ ๊ฐ์ฒด๊ฐ ํ๋ ์๋๋ฐ, ์ด ๊ฐ์ฒด ์์๋"title"์๋ "์ ๋ชฉ1"์ด๋ผ๋ ๊ฐ์ด,"content"์๋ "๋ด์ฉ1"์ด๋ผ๋ ๊ฐ์ด ๋ค์ด๊ฐ ์๋ค๊ณ ์น์.โ---> (JSON์ผ๋ก ์ง๋ ฌํ) --->{"title" : "์ ๋ชฉ1","content": "๋ด์ฉ1"} ์ด๋ ๊ฒ ๋ณํ๋๋๊ฑฐ์!!!!โโ์ญ์ง๋ ฌํ๋ ๊ฑ ๋ฐ๋โ O.. 2025. 5. 4. [Spring Boot] ํ ์คํธ์ฝ๋์์ ๋กฌ๋ณต import์๋จ @Getterpublic class JwtFactory { private String subject = "test1@email.com"; private Date issuedAt = new Date(); private Date expiration = new Date(new Date().getTime() + Duration.ofDays(14).toMillis()); private Map claims = emptyMap(); // ๋น๋ ํจํด ์จ์ ์ค์ ์ด ํ์ํ ๋ฐ์ดํฐ๋ง ์ ํ ์ค์ @Builder public JwtFactory(String subject, Date issuedAt, Date expiration, Map claims) { this.subject .. 2025. 5. 4. [Spring Security] JWT์ Authentication๊ฐ์ฒด (์ฐ์์ ์ฐจ์ด, ๋ด๊ฐ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ ์ ๋ฆฌ) ๋๋ ์ง๊ธJWT ํ ํฐ ์์ฑ + ์ ํจ์ฑ ๊ฒ์ฌํ๋ ํด๋์ค ๊ณต๋ถํ๋ค๊ฐ์๊ธด ๊ถ๊ธ์ฆ๋ค์ด ์์ด์์ ๋ฆฌ ํ๋ ค๊ณ ํจโ๊ฑ ๋ด๊ฐ ์ดํดํ๋ฉด์ ์ฃผ์ ์ฃผ์ ์ฐ๋๊ฑฐ๋ผ์ฝ๊ธฐ ์์ข์ ์ ์์..ใ โ /*ํ ํฐ ์์ฑ & ์ฌ๋ฐ๋ฅธ ํ ํฐ์ธ์ง ์ ํจ์ฑ ๊ฒ์ฌํ ํฐ์์ ํ์ํ ์ ๋ณด ๊ฐ์ ธ์ค๋ ํด๋์ค */@RequiredArgsConstructor@Servicepublic class TokenProvider { private final JwtProperties jwtProperties; public String generateToken(User user, Duration expiredAt) { Date now = new Date(); return makeToken(new Date(now.getTime() + expiredA.. 2025. 5. 4. [Spring Security] ํ ํฐ ์์ฑ, ์ ํจ์ฑ ๊ฒ์ฌ, ์ ๋ณด ๋นผ์ค๋ ํด๋์ค ์ฝ๋ - TokenProvider ์ ํฌ์คํ ์์ ์์กด์ฑ ์ถ๊ฐ,์ด์ ๋ฐ๊ธ์ & ๋น๋ฐํค ์ค์ ํ๋ค์๊ทธ๊ฑธ ๋ณ์๋ก ๊ฐ๊ณ ์ค๋ ํด๋์ค (JwtProperties.java) ๋ง๋ค์์โ์ด๋ฒ์๋ ํ ํฐ ์์ฑํ๊ณ , ์ ํจ์ฑ ๊ฒ์ฆํ๊ณ ,ํ ํฐ์์ ํ์ํ ์ ๋ณด ๋นผ์ค๋ ํด๋์ค ์์ฑํ ๊ฑฐ์โ์ด๋ฆ์ TokenProvider.java์์น๋ config/jwt ๋๋ ํ ๋ฆฌ ๋ด /*ํ ํฐ ์์ฑ & ์ฌ๋ฐ๋ฅธ ํ ํฐ์ธ์ง ์ ํจ์ฑ ๊ฒ์ฌํ ํฐ์์ ํ์ํ ์ ๋ณด ๊ฐ์ ธ์ค๋ ํด๋์ค */@RequiredArgsConstructor@Servicepublic class TokenProvider { private final JwtProperties jwtProperties; public String generateToken(User user, Duration expiredAt) { Da.. 2025. 5. 4. [Spring Security] JWT ๊ตฌํ ์ค๋น๋จ๊ณ(์์กด์ฑ ์ถ๊ฐ, ์ด์ ๋ฐ๊ธ์, ๋น๋ฐํค ์ค์ ) 1. ์์กด์ฑ ์ถ๊ฐ build.gradle์์dependencies์ implementation 'io.jsonwebtoken:jjwt:0.9.1'implementation 'javax.xml.bind:jaxb-api:2.3.1' ์ถ๊ฐ 2. ํ ํฐ ์ ๊ณต์ ์ถ๊ฐ applicaion.properties์ //.yml ํ์์jwt: issuer: tester1@gmail.com secret_key_ : study-springboot//.properties ํ์์jwt.issuer=tester1@gmail.comjwt.secret_key_=study-springboot์ด์ ์์ ๊ฐ๋ค์ ๋ณ์๋ก ์ ๊ทผํ๋๋ฐ ์ฐ๋ JwtProperties ํด๋์ค ๋ง๋ค ์ฐจ๋กโ์ฐธ๊ณ ๋ก Spring Boot๋ ํ์ดํ(-) → ์นด๋ฉ์ผ.. 2025. 5. 4. ์ด์ 1 2 ๋ค์ ๋ฐ์ํ