⚙️ 개발환경

spring boot 3.3.3, java 17


📍 Spring Security JSP 태그 라이브러리 변화


Spring Boot 3.x에서 Spring Security 6.x로 업그레이드하면서, JSP 태그 라이브러리의 일부 속성이 변경되었습니다.

특히, ifAnyGranted, ifAllGranted, ifNotGranted 같은 속성이 deprecated 되었고,

 

대신 access 속성을 사용하여 SpEL(스프링 표현 언어) 표현식을 작성해야 합니다.

 

기존 코드에서 ifNotGranted,  ifAnyGranted를 사용하는 방식은 다음과 같습니다

<sec:authorize ifNotGranted="ROLE_MANAGER">
</sec:authorize>

이 코드는 'ROLE_MANAGER' 권한이 없는 사용자에게만 내용을 표시합니다.

<sec:authorize ifAnyGranted="ROLE_SYSTEM_ADMIN, ROLE_CUSTOMER">
</sec:authorize>

이 코드는 사용자가 'ROLE_SYSTEM_ADMIN' 또는 'ROLE_CUSTOMER' 중 하나라도 가지고 있을 경우 콘텐츠를 표시합니다.

 

업데이트된 코드는 다음과 같습니다.

<sec:authorize access="!hasAuthority('ROLE_MANAGER')">
</sec:authorize>
<sec:authorize access="hasAnyAuthority('ROLE_SYSTEM_ADMIN', 'ROLE_CUSTOMER')">
</sec>

 

여기서 access 속성은 SpEL 표현식을 사용하여 권한을 검사합니다.

hasAuthority()  메서드는 지정된 권한이 있는 경우 true를 반환합니다.

* 위 코드는 사용자가 ‘ROLE_MANAGER’ 권한을 가지고 있지 않을 때 true를 반환합니다.

hasAnyAuthority 메서드는 지정된 권한 중 하나라도 있는지를 확인합니다.


🧚 의존성 추가

Spring Security JSP 태그를 사용하기 위해서는 다음 의존성을 추가해야 합니다. (Gradle 기준)

implementation 'org.springframework.security:spring-security-taglibs'

🔨 결론

Spring Boot 3.3.3와 Java 17을 사용하는 경우, Spring Security의 최신 기능을 활용하여 애플리케이션 보안을 강화할 수 있습니다. JSP에서의 권한 검사를 보다 유연하게 처리할 수 있는 방법으로, SpEL을 활용한 <sec:authorize> 태그 사용법을 익히는 것이 중요합니다. 이러한 변화를 통해 더 안전하고 효율적인 웹 애플리케이션을 개발할 수 있습니다.

 

이 글이 Spring Boot 3.x 환경에서의 Spring Security 사용에 도움이 되길 바랍니다!

 

+ Recent posts