์คํ๋ง ์ํ๋ฆฌํฐ๋ก ๊ด๋ฆฌ์, ๊ฐ๋ฐ์ ๊ถํ ์ถ๊ฐ ์ค์ ํ๊ธฐ
๊ฐ๋จํ๊ฒ ๋ถ๊ฐ์ ์ธ ๊ถํ ์ค์ ์ ํด๋ณด์.
Secured
์ผ๋ฐ์ ์ผ๋ก ๊ธ๋ก๋ฒํ ๊ถํ ์ฒ๋ฆฌ๋ SecureConfig ํด๋์ค์ configure() ๋ฉ์๋์์ ์ฒด์ด๋์ ํตํด ์ค์ ํ๋ค. ํ์ง๋ง ์ด๋ ธํ ์ด์ ๋ง ์ค์ ํ๋ค๋ฉด ์ปจํธ๋กค๋ฌ์์๋ ๊ฐ ์์ฒญ ๋ฉ์๋ ๋ณ ๊ถํ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
SecureConfig์ ์ด๋ ธํ ์ด์ ์ค์ ํ๊ธฐ
ํด๋์ค ๋ ๋ฒจ์ @EnableGlobalMethodSecurity
์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ค.
HTML
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) // secured ์ด๋
ธํ
์ด์
ํ์ฑํ, preAuthorize, postAuthorize ์ด๋
ธํ
์ด์
ํ์ฑํ
public class SecurityConfig extends WebSecurityConfigurerAdapter{
...
}
securedEnabled = true
: ์ปจํธ๋กค๋ฌ ์์ฒญ ๋ฉ์๋์์@Secured
์ด๋ ธํ ์ด์ ์ ์ค์ ํ ์ ์๋ค.prePostEnabled = true
: ์ปจํธ๋กค๋ฌ ์์ฒญ ๋ฉ์๋์์@PreAuthorize
,@PostAuthorize
์ด๋ ธํ ์ด์ ์ ์ค์ ํ ์ ์๋ค.
์ปจํธ๋กค๋ฌ ์์ฒญ ๋ฉ์๋ ๋ณ ๊ถํ ์ค์ ํ๊ธฐ
์ปจํธ๋กค๋ฌ์ ์์ฒญ ๋ฉ์๋์ @Secured
, @PreAuthorize
@PostAuthorize
๋ฑ์ ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ ๊ฐ ์์ฒญ ๋ฉ์๋ ๋ณ ๊ถํ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
@Controller
public class IndexController {
@Secured("ROLE_ADMIN")
@GetMapping("/info")
public @ResponseBody String info() {
return "๊ฐ์ธ ์ ๋ณด";
}
@PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')") // ๊ถํ ์ฌ๋ฌ๊ฐ ์ค์ ํ๊ธฐ ์ํด 'hasRole() or hasRole()'
@GetMapping("/data")
public @ResponseBody String data() {
return "๋ฐ์ดํฐ ์ ๋ณด";
}
}
@Secured
: ํด๋น ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ ์์ฒญ ๋ฉ์๋์๋ง ๊ฐ๋จํ๊ฒ ๊ถํ ์ค์ @PreAuthorize
: ํด๋น ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ ์์ฒญ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ์กฐ๊ฑด์ ๊ฒ์ฌ- ์ผ๋ฐ์ ์ผ๋ก
@PreAuthorize
๋ณด๋ค๋@Secured()
๋ก ๊ฒ์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
์ด ๊ฒฐ๊ณผ ๊ด๋ฆฌ์, ๊ฐ๋ฐ์ ๊ณ์ ๋ณ๋ก ์ ๊ทผํ ์ ์๋ ํ์ด์ง๊ฐ ๋ฌ๋ผ์ง๋ค!