๐Ÿƒ Spring 50

[SpringSecurity & JWT & MyBatis]ํšŒ์›๊ฐ€์ž… ๋กœ์ง

๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ์„ค์ •application.yml ์— ๋‚˜๋จธ์ง€ ์„ค์ •๋“ค์„ ๋‹ด์•„๋’€๋‹ค. configuration: map-underscore-to-camel-case: truemapper xml๋“ค์ด ์žˆ๋Š” ๊ณณ์˜ ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ฃผ๊ณ  mapper-locations: classpath:mapper/*.xml ์ž๋™์œผ๋กœ camel case๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์„ค์ • type-aliases-package: com.nuey.spring_security.dto, com.nuey.spring_security.entity dto์™€ domain์ด ์žˆ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ ์–ด์คฌ๋‹ค. (mapperScan๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ•˜์œ„ ๋ชจ๋“  ํŒจํ‚ค์ง€๋“ค์„ ๋ชจ๋‘ ์ฝ์–ด์ค€๋‹ค.)ํŒจํ‚ค์ง€ ๊ตฌ์„ฑMS sql์— ๊ฐ„๋‹จํžˆ ๋งŒ๋“  ํ…Œ์ด๋ธ”ํŒจํ‚ค์ง€๋Š” mapper๋Š” ์ผ๋ฐ˜์ ์ด๋‹ค. ์ž๋™์ž…๋ ฅ๊ฐ’๋งŒ ..

[SpringSecurity&JWT]Config ๊ธฐ๋ณธ์„ค์ •

Security Configuration: ์ธ๊ฐ€์ž‘์—… ์„ค์ • configํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ  SecurityConfig ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.๊ธฐ๋ณธ ํ‹€ํด๋ž˜์Šค ์–ด๋…ธํ…Œ์ด์…˜@Configuration → config๋ผ๋Š” ๊ฒƒ์„ ์Šคํ”„๋ง์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.@EnableWebSecurity → spring security๋ฅผ ํ™œ์„ฑํ™”์‹œํ‚ค๋Š” ์—ญํ• .ํ•จ์ˆ˜์— ์„ @Bean ๋ถ™์—ฌ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•ด์ฃผ๋„ค์š”. ์ด๋Ÿฌ๋ฉด ์Šคํ”„๋ง ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ๋Œ์•„๊ฐ€๊ฒ ์ฃ . SecurityFilterChain ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. → ๋ง ๊ทธ๋Œ€๋กœ ์ปคํ”ผ ํ•„ํ„ฐ์ฒ˜๋Ÿผ ๋ณด์•ˆํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ request์š”์ฒญ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. HttpSecurity ์„ ์ธ์ˆ˜๋กœ ๋ฐ›์•„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์Šคํ”„๋ง์ด ๋Œ์•„๊ฐ€๋ฉด์„œ ๋นˆ์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ๋•Œ HttpSecurity๋ฅผ ๋ฐ›๊ฒ ๋„ค์š”). return http.build() ..

[SpringSecurity]๋กœ๊ทธ์ธ ์„ค์ • custom login setting

โ€ป ์ด ๋ฐฉ์‹์€ spring security์— ๊ธฐ๋ณธ session๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ €๋ฒˆ์— ๋งŒ๋“ค์–ด๋‘” ์ฝ”๋“œ ๋ฐ‘์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ http๋ฅผ ํ•˜๋‚˜ ๋” ์ ๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. .formLogin(auth -> auth.loginPage("/login") → ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ์‹คํ–‰ํ•  ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. .loginProcessingUrl("/loginform") → ๋กœ๊ทธ์ธ์‹œ ์ด๋™ํ•  ํŽ˜์ด์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. .permitAll() → ๋กœ๊ทธ์ธํ•˜๋Š” ํŽ˜์ด์ง€๋กœ๋Š” ๋ชจ๋“ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.์ด๊ฑฐ๋Š” ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ ์ž๋™์œผ๋กœ ๋ฐœํ–‰ํ•˜๋Š” ํ† ํฐ์ด ๋กœ๊ทธ์ธ์‹œ ํ•„์š”ํ•œ๋ฐ..์ž„์‹œ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.(๋‚˜์ค‘์— ๊ฐ•์˜ ๋’ท๋ถ€๋ถ„์— ๋‚˜์˜จ๋Œ€์—ฌ)

[SpringSecurity&JWT]ํ™˜๊ฒฝ์„ค์ •

๊ตฌํ˜„๊ณผ ๋ชฉํ‘œ :1. ๋กœ๊ทธ์ธ ์ธ์ฆ2. ๊ฒฝ๋กœ๋ณ„ ์ ‘๊ทผ๊ถŒํ•œ ์ธ๊ฐ€3. ํšŒ์›๊ฐ€์ž… ๋™์ž‘์›๋ฆฌ์š”์ฒญRequest์ด ๋“ค์–ด์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•„ํ„ฐ์™€ ๊ฐ™์€ Spring Security๋ฅผ, Config๋ฅผ ์„ค์ •ํ•ด ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด Session์— ์ €์žฅ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋กœ ํ•„ํ„ฐ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•ด๋ณด๊ธฐ ์Šคํ”„๋ง๋ถ€ํŠธ ๋‹ค์šด๋กœ๋“œ + ์ €๋Š” MyBatis + MsSql ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ MyBatis๋งŒ ์ถ”๊ฐ€..build.gradle์—์„œ DB๋ž€์€ ์ž„์‹œ๋กœ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ณ  ์ง„ํ–‰ํšŒ์‚ฌ์—์„œ RestAPI๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ˜‘์—…์‚ฌ๊ฐ€ jwt์‚ฌ์šฉํ•˜๊ธฐ์— ์ €ํฌ์ชฝ๋„ jwt๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ..JWT ์˜์กด์„ฑ์ถ”๊ฐ€๋ฅผ ์ง„ํ–‰. ์ด ๋ถ€๋ถ„์€ ์‚ฌ์šฉํ•˜์‹œ๋Š” ์˜์กด์„ฑ๋“ค๊ณผ ๋ฒ„์ „ ํ˜ธํ™˜์ด ๋˜์•ผํ•˜๊ธฐ์— ๊ฐ์ž ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ง„ํ–‰ํ•˜์…”์•ผํ•ฉ๋‹ˆ๋‹ค.jdk 21๋‹ค์šด๋กœ..

[Spring]๋ฉ”์‹œ์ง€ ์†Œ์Šค ์„ค์ •

ํ™˜๊ฒฝ์„ค์ • ์Šคํ”„๋ง์€ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.→ ์ธํ„ฐํŽ˜์ด์Šค MessageSource ์˜ ๊ตฌํ˜„์ฒด์ธ ResourceBundleMessageSource๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด๋œ๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌcode@Beanpublic MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages", "errors"); messageSource.setDefaultEncoding("utf-8"); return messageSource;} @SpringBootApplication์ด๋‚˜  @ComponantScan์ด..

๐Ÿƒ Spring 2025.03.12

[SpringMVC]์‘๋‹ต

ํŒŒ๋ผ๋ฏธํ„ฐ  @ModelAttribute  :๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ๋‹จ์ˆœํ™”ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€ํ•œ๋‹ค.@ModelAttribute๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ @ModelAttribute  ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ item ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค.์‚ฌ์‹ค ๊ฐ์ฒด์ด๋ฆ„์ด ๊ฐ™์œผ๋ฉด ๊ตณ์ด ("Item")์œผ๋กœ ์ ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.์Šคํ”„๋ง์€ ์ž์ฃผ์“ฐ๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ์— @ModelAttribute๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ ์žˆ๋‹ค.๋“ฑ๋ก ํ›„ PRGํŒจํ„ด์„ ์‚ฌ์šฉํ•ด  redirect ํ•ด์•ผ๋งŒ ์˜ค๋ฅ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.redirect ์‹œ,  RedirectAttributes ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€/์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.์ „์—ญ๋ณ€์ˆ˜  @ModelAttribute code์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ด๋–ค ๋ฉ”์„œ๋“œ์—๋“  Model์— regions์ด๋ž€ ์ด๋ฆ„์œผ๋กœ ์œ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.dใ…‡ใ…‡ ..

[SpringMVC]์š”์ฒญ Mapping ํ™œ์šฉ๋ฒ•

๋งคํ•‘์‹œ { } ๋กœ ๋ฌถ์–ด์„œ URI์ฃผ์†Œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.๐ŸŒž ๊ฒฝ๋กœ ๋ณ€์ˆ˜  @PathVariable @****Mapping("/{param๋ช…}")    ์ œํ•œ์ž ReturnType ๋ฉ”์„œ๋“œ๋ช…(@PathVariable ("param๋ช…") Type ๋ณ€์ˆ˜๋ช…) {codeํ™”๋ฉด์—์„œ ๋„˜์–ด์˜ค๋Š” param๋ช…์„ ์ด์šฉํ•ด ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.์‚ฌ์šฉ์˜ˆ์‹œ/mapping/{userId}  →  /mapping/nueylog ๋กœ ์‚ฌ์šฉ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.๐ŸŒž ์ง€์—ญ๋ณ€์ˆ˜๋ช…์„ param๋ช…๊ณผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋” ๊ฐ„์†Œํ™”ํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.๐ŸŒž ๋‹ค์ค‘ ์‚ฌ์šฉ๋ฒ•ํŠน์ • ํ—ค๋”๋กœ ์ถ”๊ฐ€ ๋งคํ•‘@GetMapping(value = "/mapping-header", headers = "mode=debug") code์‚ฌ์šฉ์˜ˆ์‹œ : ํ—ค๋”์— ํŠน์ •๊ฐ’์„ ์ถ”๊ฐ€ ํ›„ U..

[SpringMVC]์Šคํ”„๋งMVC ๊ตฌ์กฐ with์‚ฌ์šฉ์˜ˆ์‹œ

@Controller ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค. ์ด๋•Œ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ• ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.์ปจํŠธ๋กค๋Ÿฌ๋กœ์„œ  @RequestMapping("URI์ฃผ์†Œ") ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.๊ฒฐ๊ณผ๋งคํ•‘๋ช…์œผ๋กœ ์ฐพ์•„์˜ค๋Š” ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋ช…๋งŒ ๋‹ค๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ ํ•œ๊ตฐ๋ฐ๋กœ ๋ชฐ์•„๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค.→ ์—ฐ๊ด€๋œ ๊ธฐ๋Šฅ๋งŒ ๋ฌถ์–ด์„œ..๋งคํ•‘๋ช…์ด ๋งŽ์ด ์ค‘๋ณต๋๋Š”๋ฐ ํด๋ž˜์Šค ์œ„์—  @RequestMapping("URI์ฃผ์†Œ") ์œ„์— ํด๋ž˜์Šค ๋ ˆ๋ฒจ์— ์•ž๋‹จ ๊ฒฝ๋กœ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.์Šคํ”„๋ง์˜  Model  model.addAttribute("์ง€์ •์ด๋ฆ„", ๋ฐ์ดํ„ฐ); → ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ RequestHttpResponse์— ๋‹ด์ง€ ์•Š์•„๋„ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” Model์— ๋‹ด์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. return "ํ™”๋ฉด๋ช…"; →  ์Šคํ”„๋ง์€..

[SpringMVC]์Šคํ”„๋งMVC ํ™˜๊ฒฝ๊ตฌ์กฐ

DispatcherServlet  ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ.ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• .2025.02.28 - [โ˜• JAVA/โ˜• Library & Pattern] - [JAVA]HttpServlet ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋„์ž…ํ•ด๋ณด๊ธฐ Http Servlet์„ ์ƒ์†๋ฐ›์•„ ๋งŒ๋“ค์–ด์กŒ๋‹ค.๋ชจ๋“  ๊ฒฝ๋กœ (urlPatterns="/")์— ๋Œ€ํ•ด์„œ ๋งคํ•‘ํ•œ๋‹ค.โ€ป ์ฐธ๊ณ  : ๋” ์ž์„ธํ•œ ๊ฒฝ๋กœ๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.doDispatch() ๊ฐ€ ํ•ต์‹ฌ ์ฝ”๋“œ์ด๋‹ค.์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.2025.03.01 - [โ˜• JAVA/โ˜• Library & Pattern] - [JAVA]์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ๋„์ž…ํ•ด ์œ ์—ฐํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์–ด๋Œ‘ํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ , ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ๋‹ค์–‘ํ•œ ๋งคํ•‘์„ ์žฌ๊ณตํ•œ๋‹ค.๐Ÿ’ก ์Šคํ”„๋ง MVC์˜ ํฐ ๊ฐ•์ DispatcherServlet ์ฝ”๋“œ์˜ ..

๋ฐ˜์‘ํ˜•