์ค์ต ๋ชฉํ ๋ฐ ๊ฐ๋จํ ๋์ ์๋ฆฌ
์ค์ต ๋ชฉํ
: ์คํ๋ง ์ํ๋ฆฌํฐ ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ์ฌ ์ธ์ฆ, ์ธ๊ฐ๋ฅผ ๊ตฌํํ๊ณ ํ์ ์ ๋ณด ์ ์ฅ(์์์ฑ)์ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ์ฌ ๊ตฌํํ๋ค
๊ตฌํ
- ์ธ์ฆ : ๋ก๊ทธ์ธ
- ์ธ๊ฐ : ๊ฒฝ๋ก๋ณ ์ ๊ทผ ๊ถํ
- ํ์๊ฐ์
์ํ๋ฆฌํฐ ๋์ ์๋ฆฌ
๊ฐ๋จํ ์ ๋ฆฌํด ๋ณด์๋ฉด....
Spring Security Config๋ผ๋ filter๋ฅผ ๋ง๋ค์ด ๋์ผ๋ฉด client์ ์์ฒญ์ ๊ฐ๋ก์ฑ์ client๊ฐ ๊ฐ๊ณ ์ถ์ ๋ชฉ์ ์ง ์ด์ ์ ํน์ ํ ๊ถํ์ ๊ฐ์ง๊ณ ์๋์ง ๋ถ์์ ํ๊ณ ๊ถํ์ ํ์ธ์ ํ์ฌ ๋ง๋ ์ง ํ์ฉํ๋ ์ง ํฉ๋๋ค(์ธ์ ์ ๋ก๊ทธ์ธ ์ ๋ณด ๋๊น)
๋ฒ์
- Spring Boot 3.1.5
- Security 6.1.5
- Spring Data JPA - MySQL
- mustache
- IntelliJ Ultimate
ํ๋ก์ ํธ ์์ฑ
์์กด์ฑ
- Spring Web
- Lombok
- Mustache
- Spring Security
- Spring Data JPA
- MySQL Driver
main page
package com.example.testsecurity.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
@GetMapping("/")
public String mainP() {
return "main";
}
}
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Main Page</title>
</head>
<body>
main page
</body>
</html>
Security Config ํด๋์ค
์ธ๊ฐ
ํน์ ๊ฒฝ๋ก์ ์์ฒญ์ด ์ค๋ฉด Controller ํด๋์ค์ ๋๋ฌํ๊ธฐ ์ ํํฐ์์ Spring Security๊ฐ ๊ฒ์ฆ์ ํจ
1. ํด๋น ๊ฒฝ๋ก์ ์ ๊ทผ์ ๋๊ตฌ์๊ฒ ์ด๋ ค ์๋์ง
2, ๋ก๊ทธ์ธ์ด ์๋ฃ๋ ์ฌ์ฉ์์ธ์ง
3. ํด๋น๋๋ role์ ๊ฐ์ง๊ณ ์๋์ง
์ํ๋ฆฌํฐ Config ํด๋์ค ์์ฑ
package com.example.testsecurity.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/", "/login").permitAll() // permitAll() : ๋ชจ๋ ํ์ฉ
.requestMatchers("/admin").hasRole("ADMIN") // hasRole() : ํด๋น ์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์๋ง
.requestMatchers("/my/**").hasAnyRole("ADMIN", "USER") // hasAnyRole() : ํด๋น ์ญํ ๋ค์ ๊ฐ์ง ์ฌ์ฉ์๋ค๋ง
.anyRequest().authenticated() // anyRequest() : ์ด์ธ์ ์ฒ๋ฆฌํ์ง ๋ชปํ ๋ก์ง๋ค / authenticated : ๋ก๊ทธ์ธํ ๋ชจ๋ ์ฌ์ฉ์
);
return http.build();
}
}
์๋จ ๋ถํฐ ๋์ํ๊ธฐ ๋๋ฌธ์ ์์์ ์ ์ํ์ฌ ์ ์ด์ผ ํ๋ค(๋ฐ์ ์ฝ๋๋ค์ด ์ ๋จน์ ์ ์์)
์ถ๊ฐ ํ์ด์ง ์์ฑ
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class AdminController {
@GetMapping("/admin")
public String admin() {
return "admin";
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>admin Page</title>
</head>
<body>
admin Page
</body>
</html>
admin ํ์ด์ง์ ๋ฐ๋ก ์ ๊ทผํ ์ ์์... ๋ฐ๋ก role์ ์ค์ ํด ์ฃผ์ง ์์์...
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ ์ฃผ์ ๋ฐฉ์๊ณผ ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ ์ฐจ์ด(+ ๋ญ๊ฐ ๋ ์ข์์ง) (0) | 2024.05.27 |
---|