Spring EL 접근제어 표현식

2023. 4. 4. 12:55·📘 Backend/Spring

📘 Spring Expression Language (SpEL)

Spring Data Redis와 Cache 기능을 사용하면서 @Cacheable()의 속성값으로 SpEL을 자주 사용하게 되어 정리해봅니다.


SpEL 이란?

런타임 시 객체에 대한 쿼리와 조작을 지원하는 강력한 표현 언어입니다.

  • SpEL 표현식은 # 기호로 시작하며 중괄호로 묶어서 표현합니다. #{Expressions}
  • 속성 값을 참조할 땐 $ 기호와 중괄호로 묶어서 표현합니다. ${prop.name}
  • ex) #{${prop} + 2}

📘 연산자

📕 산술 연산자

@Value("#{19 + 1}") // 20
private double add;

@Value("#{2 ^ 10}") // 1024
private double powerOf;

@Value("#{(2 + 2) * 2 + 9}") // 17
private double brackets;

📕 관계 및 논리 연산자

@Value("#{1 == 1}") // true
private boolean equal;

@Value("#{!true}") // false
private boolean notTrue;

📕 조건부(삼항) 연산자

@Value("#{some.property != null ? some.perperty : 'default'}")
private String ternary;

@Value("#{some.property != null ?: 'default'}") // 위와 동일하게 null인 경우 default 주입
private String elvis;

📕 정규식(Regex) 표현법

matches를 이용해 문자열에 정규식을 사용 가능합니다.

@Value("#{'100' matches '\\d+'}") // true
private boolean validNumericStringResult;

@Value("#{'100asdf' matches '\\d+'}") // false
private boolean invalidNumericStringResult;

📕 Spring Security 간단한 활용

@PreAuthorize, @PostAuthorize를 활용한 인가 정책 적용시에도 SpEL로 정의할 수 있습니다.

@GetMapping("/preAuthorize")
@PreAuthorize("hasRole('ROLE_USER') AND principal.username == #account.username")
저작자표시 (새창열림)

'📘 Backend > Spring' 카테고리의 다른 글

Implements JWT Login  (0) 2023.04.04
JWT & Sticky Session  (0) 2023.04.04
Security Authentication & Authorization  (0) 2023.04.04
Security Filter Chain & DelegatingPasswordEncoder  (0) 2023.04.04
Spring Security 구조  (0) 2023.04.04
'📘 Backend/Spring' 카테고리의 다른 글
  • Implements JWT Login
  • JWT & Sticky Session
  • Security Authentication & Authorization
  • Security Filter Chain & DelegatingPasswordEncoder
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      Lock #Thread #Concurrency
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Spring EL 접근제어 표현식
    상단으로

    티스토리툴바