티스토리 뷰

  타임리프에도 변경사항이 있었다. 

 

 

  가장 대표적인 변화라면, 타임리프에서 session 객체와 request 객체에 직접 접근하던 것을 차단한 것이다. 

예를 들어 spring boot 2.2.12에서는 아래와 같은 타임리프 구성이 가능했다. 

 

th:with="currentUrl=(${#httpServletRequest.requestURI + '?' + #strings.defaultString(#httpServletRequest.queryString, '')})">

 

이제 새로운 버전에서는 #httpServletRequest  , session 등, 서블릿 객체에 위와같은 방식으로 접근하는 것이 모두 막혔다. 

 

  삭제한 이유는 문서에 명시하지는 않았지만, github 이슈에서 아래와 같이 보안 이슈라고 언급하고 있다. 


These objects are not directly available in templates in Thymeleaf 3.1 for security reasons. The recommended way to make this information available to templates is to add the specific pieces of information that are really needed by the template as context variables (model attributes in Spring).

 

 

Recommended way to go after upgrade to SpringBoot3 - attributes · Issue #920 · thymeleaf/thymeleaf

After playing around with the latest SpringBoot 3.0-RC1 I realized my application is not working anymore due to: Caused by: java.lang.IllegalArgumentException: The 'request','session','servletConte...

github.com

 

 

  대안으로 아래처럼 사용할 것을 권장하고 있다. 

 

@ControllerAdvice
public class GlobalControllerAdvice {


    @ModelAttribute("currentUrl")
    public String currentUrl(HttpServletRequest request) {
        String queryString = request.getQueryString();
        return request.getRequestURI() + (queryString != null ? "?" + queryString : "");
    }

    @ModelAttribute("currentUser")
    public String getCurrentUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.isAuthenticated()) {
            return authentication.getName();
        }
        return "testUser";
    }

}

 

그 다음으로 문제가 된 부분은 아래와 같이 사용하던 부분이었다. 이 부분은 당장 deprecated 된 것은 아니지만, 그대로 사용할 경우 경고메시지가 뜬다.

  이제 명시적으로 fragment 관련 표현은 ~{} 를 명시적으로 추가하는 것으로 스펙이 변경되었다. 

Before

<div id="top" th:insert="common :: header">...</div>

After

<div id="top" th:insert="~{common :: header}">...</div>

 

 

다행히 이 2개 말고는 크게 문제될 것이 없었다. 

 

아래 링크를 보면 어떤 것이 변했는지 모두 기록되어있으니 읽어보는 것을 추천한다. 

 

 

Thymeleaf 3.1: What’s new and how to migrate - Thymeleaf

Thymeleaf 3.1: What’s new and how to migrate Latest version is Thymeleaf 3.1.1.RELEASE. What’s new Support for Servlet API 5.0 and the jakarta.* class namespace Thymeleaf 3.1 adds support for the new jakarta.* class namespace in the Servlet API since v

www.thymeleaf.org

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함