๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ60

[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.
[Spring Security] JWT๋ž€?JWT ๊ตฌ์กฐ, ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ ๊ณผ์ • JWT๋ž€? JWT = Json Web Tokenํ† ํฐ ํ˜•์‹ ์ค‘์— ํ•˜๋‚˜์ž„!โ€‹json ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ํ† ํฐ ํฌ๋งทโ€‹๊ตฌ์„ฑ(๋‹ด๊ณ ์žˆ๋Š” ์ •๋ณด)์€header + payload + signatureโ€‹โ€‹์™œ JWT ํ˜•์‹์„ ๋งŽ์ด ์“ธ๊นŒ?- ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†๊ณ - ํ† ํฐ ์•ˆ์— ํ•„์š”ํ•œ ์ •๋ณด ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ - ๊ตฌ์กฐ ๋‹จ์ˆœํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์–ธ์–ด/ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฐœ๊ธ‰๋ฐ›์€ JWT๋ฅผ ์จ์„œ ์ธ์ฆ ํ•˜๋ ค๋ฉด,HTTP ์š”์ฒญ ํ—ค๋” ์ค‘ Authorization ํ‚ค ๊ฐ’์—Bearer + JWT ํ† ํฐ๊ฐ’ ๋„ฃ์–ด์„œ ๋ณด๋‚ด์•ผ๋จ.โ€‹ Authorization : Bearer ey~~~~ JWT ๊ตฌ์กฐ๋Š”? .์„ ๊ธฐ์ค€์œผ๋กœํ—ค๋” (header), ๋‚ด์šฉ(payload), ์„œ๋ช…(signature)๋กœ ๊ตฌ์„ฑ aaaaa.bbbbbb.ccccc // (a=ํ—ค๋”.. 2025. 5. 4.
[Spring Security] ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์ด๋ž€?ํ๋ฆ„, ํŠน์ง• ์ •๋ฆฌ JWT ๊ณต๋ถ€ ์ „์— ์‚ฌ์ „ ์ง€์‹์œผ๋กœ ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์•Œ์•„์•ผํ•จ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ & ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ๋•Œ,์ธ์ฆ๋œ ์‚ฌ๋žŒ์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค ์ค‘ ํ•˜๋‚˜โ€‹์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ œ๊ณต.โ€‹๋‚˜๋Š” ์ง€๋‚œ ์ฑ•ํ„ฐ์—์„œ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์จ์„œ์‚ฌ์šฉ์ž ์ •๋ณด ๋‹ด์€ ์„ธ์…˜ ์ƒ์„ฑ & ์ €์žฅํ•ด์„œ ์ธ์ฆํ–ˆ์Œ(= ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ)(๋”ฐ๋กœ ์ง์ ‘์ ์œผ๋กœ ๋ช…์‹œ ์•ˆํ•ด๋„ ์•Œ์•„์„œ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ ํ•ด์คŒ)โ€‹ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€, ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ž„โ€‹ํ† ํฐ์€ uniqueํ•œ ๊ฐ’์œผ๋กœ, ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์”€์„œ๋ฒ„๊ฐ€ ํ† ํฐ ๋งŒ๋“ค์–ด์„œ ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ์ฃผ๊ณ ,ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ํ† ํฐ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ฐ€์„œ๋ฒ„ํ•œํ…Œ ์š”์ฒญํ•  ์ผ ์žˆ์„ ๋•Œ ํ† ํฐ์ด๋ž‘ ๊ฐ™์ด ์‹ ์ฒญํ•จ.-> ์„œ๋ฒ„๋Š” ํ† ํฐ๋งŒ ๋ณด๊ณ  ์œ ํšจํ•œ ์‚ฌ๋žŒ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•จ ํ† ํฐ.. 2025. 5. 4.
[Spring Security] Empty encoded password ์—๋Ÿฌ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๋กœ๊ทธ์ธํ• ๋•Œ pw๊ฐ€ ๋น„์–ด์žˆ๋‹ค๊ณ  ํ•ด์„œํ„ฐ์ง€๋Š” ์˜ˆ์™ธโ€‹๋‚ด๊ฐ€ ๋ฐ”๋ณด์ง“ํ•œ๊ฑฐ์ž„..ใ…Ž @Table(name = "users")@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getter@Entitypublic class User implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", updatable = false) private Long id; @Column(name = "email", nullable = false, unique = true) private String email; @Column.. 2025. 5. 4.
[Spring Security] SecurityFilterChain ๋ณด์•ˆ ์„ค์ • ๋ฉ”์†Œ๋“œ ์„ค๋ช… // ํŠน์ • HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์›น ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ตฌ์ • @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests(auth -> auth // ํŠน์ • ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์„ค์ •. .requestMatchers("/login", "/signup", "/user").permitAll() .anyRequest().authenticated()) .formLogin(formLogin -> formLogin /.. 2025. 5. 4.
[Spring Security] 'authorizeRequests()' is deprecated ์—๋Ÿฌ ํ•ด๊ฒฐ 'authorizeRequests(org. springframework. security. config. Customizer.ExpressionInterceptUrlRegistry>)' is deprecated since version 6.1 and marked for removaโ€‹โ€‹โ€‹๋‚œ ์ฑ… ๋ณด๋ฉด์„œ ์ง„๋„ ๋”ฐ๋ผ๊ฐ€๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeRequests(auth -> auth .requestMatchers( .. 2025. 5. 4.
[Spring Security] UserDetails ํด๋ž˜์Šค (Override Method ๋‹จ์ถ•ํ‚ค) ๋‚œ UserDetails๋ฅผ ์ƒ์†๋ฐ›๋Š” User ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ƒํƒœ @Table(name = "users")@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getter@Entitypublic class User implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", updatable = false) private Long id; @Column(name = "email", nullable = false, unique = true) private String email; @Column(name = "pas.. 2025. 5. 4.
๋ฐ˜์‘ํ˜•