[Spring boot] (์๋ธ๋ฆฌํ์ ํด๋ก ์ฝ๋ฉ) + MySQL, ํ์ ๊ฐ์ ๊ตฌํ(2)
[์ฐธ๊ณ ] ์๋ ์ฒจ๋ถํ ๊ธ์ ์ฐธ๊ณ ํ์ฌ ์์ฑ๋ ์ฝ๋์ ๋๋ค!
https://inkyu-yoon.github.io/docs/Language/SpringBoot/SpringSecurityJoin
์๋ (1)์์ ์ฐธ๊ณ ํ ์ฑ ์ด ์๋๋ฐ security๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์์ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ์ด ์์ด์ ๊ตฌ๊ธ๋งํ๋ค๊ฐ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฝ๋๋ฅผ ๊ตฌํํ๊ฒ ๋์๋คใ ใ
1. ์์กด์ฑ ์ถ๊ฐ
implementation 'org.springframework.security:spring-security-test'
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
2. security ์ฝ๋ ์ถ๊ฐ
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.httpBasic().disable()
.csrf().disable()
.cors().and()
.authorizeRequests()
.antMatchers("user/register", "user/login").permitAll()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.build();
}
security์ securityFilterChain์ด ์ถ๊ฐ๋์๋ค.
csrf() : ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์๋์น ์์ ์์กฐ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธ
→ disable() : rest api๋ฅผ ์ด์ฉํ ์๋ฒ๋ผ๋ฉด, ์๋ฒ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ถ ํ์ํ csrf ์ฝ๋ ์์ฑํ ํ์ ์์
์ฐธ๊ณ >> https://velog.io/@woohobi/Spring-security-csrf%EB%9E%80
authorizeRequests() : ์ํ๋ฆฌํฐ ์ฒ๋ฆฌ์ HttpServletRequest๋ฅผ ์ด์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธ
antMatchers() : ํน์ ํ ๊ฒฝ๋ก ์ง์
permitAll() : ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ๊ฐ๋ฅ
์ฐธ๊ณ >> https://velog.io/@jayjay28/2019-09-04-1109-%EC%9E%91%EC%84%B1%EB%90%A8
3. controller ์์ฑ
package com.example.everytime.controller;
import com.example.everytime.DTO.UserDto;
import com.example.everytime.entity.User;
import com.example.everytime.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
@RequestMapping("/user")
@Controller
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
private final PasswordEncoder passwordEncoder;
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/register")
public void userRegister(@RequestBody UserDto userDto) {
User user = User.createUser(userDto, passwordEncoder);
User savedUser = userService.saveUser(user);
}
}
/user/register๋ก post ์์ฒญ์ ํ๋ฉด ํ์๊ฐ์ ๋!
โ @RequestBody์์ dto๋ก ํ์ ์ ๋ณด๋ฅผ ๋ฐ์์จ๋ค
โก dto๋ฅผ User.createUser์ ๋งค๊ฐ๋ณ์๋ก ์ฝ์ ํ์ฌ ์ํฐํฐ๋ก ๋ณ๊ฒฝ, ์ด๋ ๋น๋ฐ๋ฒํธ๋ ์ํธํํ๋ค
โข Serivce์ ๊ตฌํ๋ saveUser๋ฅผ ํธ์ถํ์ฌ ๋งค๊ฐ๋ณ์๋ก ์ํฐํฐ๋ฅผ ์ฝ์ ํ๊ณ , ์ต์ข ์ ์ผ๋ก ํ์ ์ ๋ณด๋ฅผ db์ ์ ์ฅ
* ์ด๋ mysql์ ์ฝ์ ํ๋ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ฐ (์ ํํ ์ค๋ฅ๊ฐ ๋ญ์๋์ง ๊ธฐ์ต์ด ์ ๋จ...) ๊ทธ๊ฑด ๊ทธ๋ฅ ๋ฐ์ดํฐ์ ๋นํด ์ปฌ๋ผ ์ฌ์ด์ฆ๊ฐ ์์์ ์๊ธด ์ค๋ฅ๋ก, ํฌ๊ธฐ๋ฅผ ๋๋ ค์ฃผ๋ฉด ๋๋ค
4. ๊ฒฐ๊ณผ
์ฑ๊ณต!