MapleStory Finger Point

๐ŸŸค JAVA/๐ŸŸค Spring 41

[Spring Security] ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๊ตฌํ˜„

( ์ œ๊ฐ€ ์ž‘์—…ํ–ˆ๋˜  ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)   ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”์— ๊ด€ํ•œ ์ด๋ก ์€ ์ด์ชฝ ๊ฒŒ์‹œ๋ฌผ ์ฐธ๊ณ  ! https://hyejux.tistory.com/801 [Spring Security] BCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜Spring Security ์—์„œ๋Š” BCryptPasswordEncoder ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ์ด ํด๋ž˜์Šค๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ BCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐBCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ hyejux.tistory.com https://hyejux.tistory.com/802 [Spring Security] BCryptPasswordEncoder ํด๋ž˜์Šค[ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ] BCryptPass..

[Spring Security] ๊ถŒํ•œ ์ฒ˜๋ฆฌ

๋ชฉ์ฐจ   ( ์ œ๊ฐ€ ์ž‘์—…ํ–ˆ๋˜  ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.) 1. ๊ถŒํ•œ ์ž‘์—… (EmployeeDetails.java)  // ๊ถŒํ•œ ๊ด€๋ จ ์ž‘์—…์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ @Override public Collection getAuthorities() { Collection authorities = new ArrayList(); try { // Employee์˜ authorityGrade๋ฅผ UserRole Enum์œผ๋กœ ๋ณ€ํ™˜ UserRole role = UserRole.valueOf(employee.getAuthorityGrade()); // ๊ถŒํ•œ์— ROLE_ ์ ‘๋‘์‚ฌ ๋ถ™์—ฌ ์ถ”๊ฐ€ authorities.add(new SimpleGrantedAuthority("R..

[Spring Security] ๋กœ๊ทธ์ธ ๊ตฌํ˜„

๋ชฉ์ฐจ   ( ์ œ๊ฐ€ ์ž‘์—…ํ–ˆ๋˜  ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)   1. build gradle ์— ์˜์กด์„ฑ ์ถ”๊ฐ€ //์‹œํ๋ฆฌํ‹ฐ ๋ฒ„์ „์€ ์Šคํ”„๋ง๋ฒ„์ „์— ๋”ฐ๋ผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. //์‹œํ๋ฆฌํ‹ฐ 5๋ฒ„์ „ => ์Šคํ”„๋ง ๋ถ€ํŠธ 2๋ฒ„์ „ (์ˆ˜์—…) //์‹œํ๋ฆฌํ‹ฐ 6๋ฒ„์ „ => ์Šคํ”„๋ง ๋ถ€ํŠธ 3๋ฒ„์ „ (๋ฌธ๋ฒ•์ด ์™„์ „ ๋ณ€๊ฒฝ๋˜๋‹ˆ ์ฃผ์˜) implementation 'org.springframework.boot:spring-boot-starter-security' //์‹œํ๋ฆฌํ‹ฐ ํƒ€์ž„๋ฆฌํ”„์—์„œ ์‚ฌ์šฉ implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' //์‹œํ๋ฆฌํ‹ฐ ํ…Œ์ŠคํŠธ testImplementation 'org.springframework.security:sp..

[Spring Security] Authentication(์ธ์ฆ)

์‹œํ๋ฆฌํ‹ฐ ๊ธฐ๋ณธ ํ‚ค์›Œ๋“œ Filter ๊ธฐ๋ฐ˜ ๋™์ž‘ (ํ•„ํ„ฐ์ฒด์ธ)๋ชจ๋“  ์š”์ฒญ์€ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ์ ‘๊ทผ ์ฃผ์ฒด(Principal) : ๋ณดํ˜ธ๋œ ๋Œ€์ƒ์— ์ ‘๊ทผํ•˜๋Š” ์ฃผ์ฒด(์œ ์ €) ์ธ์ฆ(Authentication) : ์ฆ๋ช…, ์œ ์ €๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ, ํ†ต์ƒ ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ถŒํ•œ(Role) : ๋กœ๊ทธ์ธ ๋œ ์‚ฌ๋žŒ + role (๊ถŒํ•œ) ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ธ๊ฐ€(Authorization) : ํ—ˆ๋ฝ, ์œ ์ €์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ™•์ธ, ํ—ˆ๋ฝํ•˜๋Š” ๊ฒƒ   ๋กœ๊ทธ์ธ ์ธ์ฆ ์ฒ˜๋ฆฌ ๊ณผ์ •  1.  User ๊ฐ€ ๋กœ๊ทธ์ธ ์ •๋ณด + ์ธ์ฆ ์š”์ฒญ์„ ํ•œ๋‹ค (Http Request) 2. ๋ชจ๋“  ์š”์ฒญ์€ `AuthenticationFilter` ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. (๋ชจ๋“  ์š”์ฒญ ๊ฐ€๋กœ์ฑ„๊ธฐ)3.  `UsernamePasswordAuthenticationToken`(..

[Spring Security] BCryptPasswordEncoder ํด๋ž˜์Šค

[ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ] BCryptPasswordEncoder ๋Š” ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ(ํ”„๋ ˆ์ž„์›Œํฌ) ์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค ๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ ํ•จ์ˆ˜์ธ BCrypt ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.BCrypt ์˜ ๊ฒฝ์šฐ์—๋Š”  ์†”ํŠธ(salt) ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ํ•ด์‹ฑํ•œ๋‹ค.  ๋กœ๊ทธ๋ผ์šด๋“œ = ๊ฐ•๋„ (strength)๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์•”ํ˜ธ๋ฅผ ํ•ด์‹œ ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ์ˆ˜ํ–‰ ์ •๋„์ด๋‹ค. (๊ธฐ๋ณธ๊ฐ’ 10)  BCryptPasswordEncoder ํด๋ž˜์Šค์—๋Š” ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•จ  [ BCryptPasswordEncoder ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜ ] 1. `String encode(CharSequence rawPassword)`ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ๋ฉ”์„œ๋“œ (์›๋ณธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹ฑ) 2. `boolean matches(CharS..

[Spring Security] BCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Spring Security ์—์„œ๋Š” BCryptPasswordEncoder ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ์ด ํด๋ž˜์Šค๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ BCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐBCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ๋‹ค.  - BCrypt ๋ž€? BCrypt ๋ฐฉ์‹์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์„ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ๋กœ ์›๋ณธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋‹ค.  - BCrypy ๋™์ž‘ ๋ฐฉ์‹ ๋‚ด๋ถ€์ ์œผ๋กœ ๋žœ๋คํ•œ ์†”ํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์— ํฌํ•จ์‹œํ‚จ๋‹ค. ๋žœ๋ค salt ์ƒ์„ฑ >  ๋น„๋ฐ€๋ฒˆํ˜ธ + salt ๊ฒฐํ•ฉ > ๋น„์šฉํŒฉํ„ฐ์— ๋”ฐ๋ฅธ ๋ฐ˜๋ณต ํ•ด์‹ฑ > ํ•ด์‹ฑ ๊ฒฐ๊ณผ ์ €์žฅ  ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.  - salt(์†”ํŠธ) ๋ž€?ํ•ด์‹œํ•จ์ˆ˜์— ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋žœ๋ค ๋ฐ์ดํ„ฐ 1. ๋ฌด์ž‘์œ„์„ฑ ์ถ”๊ฐ€ : ๋™์ผํ•œ ๋น„..

[Spring boot] Thymeleaf + Model

๋ ˆ์ด์•„์›ƒ ํ…œํ”Œ๋ฆฟ ์ ์šฉ: layout03 ํ…œํ”Œ๋ฆฟ์— container ๋ถ€๋ถ„์„ ์ „๋‹ฌํ•˜์—ฌ ํ•ด๋‹น ํ…œํ”Œ๋ฆฟ์˜ ํŠน์ • ๋ถ€๋ถ„๋งŒ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๊ณตํ†ต๋œ ๋ ˆ์ด์•„์›ƒ์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ํŠน์ • ๋ถ€๋ถ„๋งŒ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™”๋ฉด์— ์ง„์ž…ํ•  ๋•Œ TestVO๋ฅผ Model์— ๋‹ด์•„ ํ™”๋ฉด์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. 1. ํšŒ์›์ •๋ณดํ™•์ธ ๋งํฌ์—๋Š” quiz_result01?ํ‚ค=๊ฐ’ ํ˜•ํƒœ๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋„˜๊ธฐ๊ณ  ์ถœ๋ ฅํ•ด ์ฃผ์„ธ์š” 2. ์•„๋ž˜ class="container" ๋ถ€๋ถ„๋งŒ layout03 ํ…œํ”Œ๋ฆฟ์— ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•˜์„ธ์š” ํšŒ์›๋ฒˆํ˜ธ: [[${vo.num}]] ์ด๋ฆ„: [[${vo.name}]] ๋‚˜์ด: [[${vo.age}]] ํšŒ์›์ •๋ณดํ™•์ธ   ๊ฒฐ๊ณผํ™”๋ฉด ๋„˜์–ด์˜จ ๊ฐ’: [[${num}]]   ..

[spring boot] RestController

@RestController //Controller + ResponseBody(์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‘๋‹ต์„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๊ณณ์œผ๋กœ ๋ฐ”๊ฟˆ) ํ•ฉ์„ฑ์–ด    JSON ํ˜•์‹์˜ ๋ฐ˜ํ™˜ 1. Vo ํƒ€์ž…  2. Map ํƒ€์ž…     jsonํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก @RequestBody - JSON๋ฐ์ดํ„ฐ๋ฅผ -> ์ž๋ฐ” ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ˜•ํ•ด์„œ ๋งตํ•‘ { "name" : "ํ™๊ธธ๋™", "age" : 20, "addr" : "์„œ์šธ์‹œ์‹œ" }       /////////////////////////////////////////////////////////////////////////////// //์‘๋‹ต๋ฌธ์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ResponseEntity //@CrossOrigin({"http://127.0.0.1:5500", "h..

[SpringBoot] thymeleaf ํƒ€์ž„๋ฆฌํ”„ - ๋‚ด์žฅ๊ฐ์ฒด

ํƒ€์ž„๋ฆฌํ”„ ๋‚ด์žฅ๊ฐ์ฒด ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋ฐฐ์—ด์˜ ๊ธธ์ด [[${ #arrays.length(arr) }]] ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด [[${ #lists.size(list) }]] ๋นˆ๋ฆฌ์ŠคํŠธ ํ™•์ธ [[${ #lists.isEmpty(list) }]] [[${now}]] [[${ #dates.format(now, 'yyyy-MM-dd') }]] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐ’ ๋ฐ›๊ธฐ

[SpringBoot] thymeleaf ํƒ€์ž„๋ฆฌํ”„ - ํƒ€์ž…/์ œ์–ด๋ฌธ

ํƒ€์ž„๋ฆฌํ”„ ๋ณ€์ˆ˜, ์ œ์–ด๋ฌธ [[${'hello world'}]] [[${1 == 1}]] [[${1 eq 1}]] ๋ณ€์ˆ˜ ์„ ์–ธ [[${a}]] [[${b}]] ์กฐ๊ฑด๋ฌธ 10๊ณผ ๊ฐ™์Œ 10๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค if if์™€ ์กฐ๊ฑด์„ ๋™์ผํ•˜๊ฒŒ ๋‹ฌ์•„์ค๋‹ˆ๋‹ค (else๋ฌธ) 3ํ•ญ ์—ฐ์‚ฐ์ž [[${ true ? '์ฐธ์ž…๋‹ˆ๋‹ค' : '๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค'}]]     ๋ฐ˜๋ณต๋ฌธ [[${vo.num}]] [[${vo.name}]] [[${vo.addr}]] [[${vo.a..