Spring Security RoleHierarchy ๋ฏธ์ ์šฉ ์ด์Šˆ

2022. 12. 26. 12:02ยท ๐ŸŒฑ Spring

Spring Security๋ฅผ ์‚ฌ์šฉํ•ด ๊ถŒํ•œ ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ @Secured๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ RoleHierarchy๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

[ํ™˜๊ฒฝ]

java 11

Spring Boot 2.7.6

Spring Security 5.7.5

SpringBoot version / Spring Security version

 

[์‹œ๋‚˜๋ฆฌ์˜ค]

์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

SecurityConfig ์„ค์ •์—์„œ @EnableGlobalMethodSecurity ์„ค์ •์„ ์ด์šฉํ•ด securityEnabled = true ์†์„ฑ์„ ์ง€์ •ํ•ด @Secured์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉ

SecurityConfig

๊ถŒํ•œ ๊ณ„์ธต์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด RoleHierarchy ์„ค์ •์„ Bean์œผ๋กœ ๋“ฑ๋ก

ADMIN > MANAGER > USER ์„ค์ •์œผ๋กœ ADMIN์€ MANAGER, USER์˜ ๊ถŒํ•œ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค.

roleHierarchy

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด @Secured ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•œ Custom Annotation์„ ๋งŒ๋“ค์–ด ์ง„ํ–‰ํ–ˆ๋‹ค.

Custom Annotation
MemberController

 

๊ธฐ๋Œ€ ํšจ๊ณผ : Manager ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์œ ์ €๊ฐ€ /user1, /user2์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  /user3์— ๋Œ€ํ•ด์„œ๋Š” ๊ถŒํ•œ๋ถ€์กฑ์œผ๋กœ ์ˆ˜ํ–‰ ๋ถˆ๊ฐ€.

 

Manager๊ถŒํ•œ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•œ ๊ฒฐ๊ณผ

User ๊ถŒํ•œ์„ ๊ฐ€์ง€๋Š” ์š”์ฒญ
Manager ๊ถŒํ•œ์„ ๊ฐ€์ง€๋Š” ์š”์ฒญ

RoleHierarchy๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ชจ์Šต์ด๋‹ค.

 

[ํ•ด๊ฒฐ๊ณผ์ •]

์•„๋ž˜ ์ด์Šˆ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

https://github.com/spring-projects/spring-security/issues/9158

 

RoleHierarchy is ignored with GlobalMethodSecurityConfiguration and @Secured annotation ยท Issue #9158 ยท spring-projects/spring

Describe the bug Using @EnableGlobalMethodSecurity(securedEnabled = true) does not work with injected RoleHierarchy For @Secured based version of interceptor the only Voters configured in Affirmati...

github.com

 @EnableGlobalMethodSecurity ์„ค์ •์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ MethodSecurity (@Secured, @PreAuthorized ๋“ฑ)์— RoleHierarchy๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

https://github.com/spring-projects/spring-security/issues/9158

๋Œ€์‹  @EnableMethodSecurity ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

+ @Secured๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด @EnableMethodSecurity์˜ securedEnabled๋ฅผ true๋กœ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

@PreAuthorize, @PostAuthorize์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” default๊ฐ€ true๋ผ์„œ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

'๐ŸŒฑ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Error creating bean with name 'jpaAuditingHandler'  (0) 2023.07.15
SpringBoot 3.1.1 ๋นŒ๋“œ ์‹œ ์ž๋ฐ” ๋ฒ„์ „ ์•ˆ๋งž์Œ  (1) 2023.06.29
java.lang.NullPointerException: null at springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56)  (0) 2022.10.09
org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 8.0  (0) 2022.08.26
@Value annotation ์‚ฌ์šฉ ๊ฐ„ ์œ ์˜์‚ฌํ•ญ  (0) 2022.07.05
  1. [ํ™˜๊ฒฝ]
  2. [์‹œ๋‚˜๋ฆฌ์˜ค]
  3. [ํ•ด๊ฒฐ๊ณผ์ •]
'๐ŸŒฑ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Error creating bean with name 'jpaAuditingHandler'
  • SpringBoot 3.1.1 ๋นŒ๋“œ ์‹œ ์ž๋ฐ” ๋ฒ„์ „ ์•ˆ๋งž์Œ
  • java.lang.NullPointerException: null at springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56)
  • org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 8.0
_์ฃผ๋…ธ
_์ฃผ๋…ธ
_์ฃผ๋…ธ
juno.log
_์ฃผ๋…ธ
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (88)
    • ๐Ÿ’ฌ Language (15)
      • C (1)
      • C++ (1)
      • Java (12)
    • ๐Ÿ–ฅ๏ธ Computer (46)
      • Data Structure (2)
      • Computer Science (3)
      • Algorithm Solution (41)
    • ๐ŸŒฑ Spring (14)
    • ๐Ÿ“ฆ Database (1)
    • ๐Ÿฅณ Project (6)
      • kakao chatbot (6)
    • ๐Ÿ˜† Daily (5)
      • ์žก๋‹ด (5)
      • TIL (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๋ธ”๋กœ๊ทธ ๊ด€๋ฆฌ
  • GitHub
  • Velog

์ธ๊ธฐ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.0
_์ฃผ๋…ธ
Spring Security RoleHierarchy ๋ฏธ์ ์šฉ ์ด์Šˆ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.