복붙노트

[SPRING] Spring이 속성 파일에서 삽입 될 때 SpEL 표현식의 모든 문자 / 표현식을 평가할 수 있습니까?

SPRING

Spring이 속성 파일에서 삽입 될 때 SpEL 표현식의 모든 문자 / 표현식을 평가할 수 있습니까?

Spring이 속성 파일에서 @PreAuthorize (...) 주석으로 주입 될 때 왜 모든 식을 직접 평가하지 않는지 궁금합니다. 스프링이 '(', ')', '' '등과 같은 일부 문자를 평가하지 않거나 속성 파일에서 삽입 된 값 위에 특수 문자를 추가한다고 생각합니다. 명확히하기 위해 다음 예제를 고려해 보겠습니다.

@PreAuthorize("hasRole('ROLE_ADMIN')")

위의 표현은 정상이며 잘 작동합니다. 특성 파일의 값이 다음과 같다고 가정하십시오.

role1=ROLE_ADMIN
role2='ROLE_ADMIN'
role3=hasRole('ROLE_ADMIN')

내 결론 :

위의 (1)과 (2)에서 우리는 한 가지를 깨닫게됩니다. 즉, 삽입 된 값이 @PreAuthorize (...) 주석에 전달 될 때 작은 따옴표 ( ')로 표시되는 것 같습니다. 이 진술이 사실이 아니라면 (1)과 (2)는 효과가 없을 것입니다. 그것의 다만 나의 결론!.

(3)에 이르면 (1)과 (2)와 비슷한 것처럼 보입니다. 파일의 값은 "hasRole ( 'ROLE_ADMIN')"입니다. 이 값을 올바르게 삽입 한 후 @PreAuthorize (...)에 전달하는 동안 작은 따옴표를 추가하면 @PreAuthorize ( " 'hasRole ('ROLE_ADMIN ')'")와 유사합니다. 그래서 " 'hasRole ('ROLE_ADMIN ')'"은 부울 값이 아닌 문자열입니다. 내 용의자.

의문:

내 결론이 맞는 것 같니? 그렇지 않다면, 제가 놓친 뭔가가 있다면 저를 지적 해 주시겠습니까? 또는 속성 파일에서 값을 주입하여 @PreAuthorize (...)를 달성 할 수있는 대체 솔루션이 있다면 저에게 알려주십시오.

미리 감사드립니다.

참고 : 구성이나 주입 문제가 아닙니다. 값이 올바르게 주입되었는지 확인했습니다.

해결법

  1. ==============================

    1.대답의 핵심은 SpEL에서 String 리터럴을 나타내는 방법입니다. 다음 내용이 유효합니다.

    대답의 핵심은 SpEL에서 String 리터럴을 나타내는 방법입니다. 다음 내용이 유효합니다.

    이제 위의 예를 살펴 보겠습니다.

  2. from https://stackoverflow.com/questions/19836387/can-spring-evaluate-all-characters-expressions-in-spel-expressions-as-they-are-i by cc-by-sa and MIT license