Spring Security๋ฅผ ์ฌ์ฉํด ๊ถํ ๊ณ์ธต์ ๊ตฌํํ๋ ค๊ณ ํ์ผ๋ @Secured๋ฅผ ์ฌ์ฉํ๋ฉด์ RoleHierarchy๊ฐ ์ ์ฉ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
[ํ๊ฒฝ]
java 11
Spring Boot 2.7.6
Spring Security 5.7.5
[์๋๋ฆฌ์ค]
์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
SecurityConfig ์ค์ ์์ @EnableGlobalMethodSecurity ์ค์ ์ ์ด์ฉํด securityEnabled = true ์์ฑ์ ์ง์ ํด @Secured์ด๋ ธํ ์ด์ ์ ์ฌ์ฉ
๊ถํ ๊ณ์ธต์ ์ง์ ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด RoleHierarchy ์ค์ ์ Bean์ผ๋ก ๋ฑ๋ก
ADMIN > MANAGER > USER ์ค์ ์ผ๋ก ADMIN์ MANAGER, USER์ ๊ถํ์ ๋ํด ์ํ ๊ฐ๋ฅํด์ผํ๋ค.
๋ค์๊ณผ ๊ฐ์ด @Secured ์ด๋ ธํ ์ด์ ์ ๋ํ Custom Annotation์ ๋ง๋ค์ด ์งํํ๋ค.
๊ธฐ๋ ํจ๊ณผ : Manager ๊ถํ์ ๊ฐ์ง๊ณ ์๋ ์ ์ ๊ฐ /user1, /user2์ ๋ํด ์ํ ๊ฐ๋ฅํ๊ณ /user3์ ๋ํด์๋ ๊ถํ๋ถ์กฑ์ผ๋ก ์ํ ๋ถ๊ฐ.
Manager๊ถํ์ผ๋ก ํ ์คํธ ํ ๊ฒฐ๊ณผ
RoleHierarchy๊ฐ ์ ์์ ์ผ๋ก ์ ์ฉ๋์ง ์๋ ๋ชจ์ต์ด๋ค.
[ํด๊ฒฐ๊ณผ์ ]
์๋ ์ด์๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ์ธ์งํ ์ ์์๋ค.
https://github.com/spring-projects/spring-security/issues/9158
@EnableGlobalMethodSecurity ์ค์ ์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ MethodSecurity (@Secured, @PreAuthorized ๋ฑ)์ RoleHierarchy๊ฐ ์ ์ฉ๋์ง ์๋๋ค.
๋์ @EnableMethodSecurity ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
+ @Secured๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด @EnableMethodSecurity์ securedEnabled๋ฅผ true๋ก ์ค์ ํด์ค์ผํ๋ค.
@PreAuthorize, @PostAuthorize์ ๊ฐ์ ๊ฒฝ์ฐ๋ default๊ฐ true๋ผ์ ๊ทธ๋ฅ ์ฌ์ฉํ ์ ์๋ค.