반응형
일단 Spring Boot App을 Tomcat에 올려서 사용하는 분들은 잘 될것이므로, 뒤로 가기를 눌러주시길..
Embedded Server로 띄우는 경우, 아래와 같은 구문을 freemarker상단에 넣어서 taglib을 가져오겠다고하면,
url이 정확한데도 불구하고, 찾을 수 없다고 나온다.
<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] >
이런 경우 기본적으로 아래와 같은 두 가지의 라이브러리를 필요로 한다.
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
이렇게 추가를 하고, 돌려보면 jsp만 사용하는 환경에서는 잘 돌아갈 것이다.
하지만, Boot 환경에서의 Freemarker는 Spring Security의 TagLib에 대한 고려가 되어 있지 않기 때문에,
이미 설정된 부분을 불러와서 Tld를 로딩할 수 있도록 수동처리해주어야 한다.
아래와 같은 클래스를 만들어서 기존 Freemarker 설정(FreeMarkerConfigurer)을 불러와서, Tld를 직접 인식하도록 해준다.
import java.util.Arrays; import java.util.List; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; public class ClassPathTldsLoader { private static final String SECURITY_TLD = "/META-INF/security.tld"; final private List<String> classPathTlds; public ClassPathTldsLoader(String... classPathTlds) { super(); if(classPathTlds.length == 0){ this.classPathTlds = Arrays.asList(SECURITY_TLD); }else{ this.classPathTlds = Arrays.asList(classPathTlds); } } @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; @PostConstruct public void loadClassPathTlds() { freeMarkerConfigurer.getTaglibFactory().setClasspathTlds(classPathTlds); } }
그 후, 아래와 같이 Bean으로 등록해주면 해결이 된다.
@Bean @ConditionalOnMissingBean(ClassPathTldsLoader.class) public ClassPathTldsLoader classPathTldsLoader(){ return new ClassPathTldsLoader(); }
Spring Issue Tracker에는 2014년부터 문제가 되고 있던 사항(https://github.com/spring-projects/spring-boot/issues/907)
인데, 공식적으로 해결을 안해준다. ㅠㅠ
반응형
'개발 > Spring Framework' 카테고리의 다른 글
[Spring Security] UserDetailService wrapping (0) | 2016.06.10 |
---|---|
[Spring Boot] jar로 패키징 시 daemon화 시키기 (0) | 2016.06.10 |
[Spring Boot] freemarker에서 Spring Security csrf 처리하기 (0) | 2016.06.10 |
[Spring Fox] Swagger-SpringMvc에서 Migration하기 (0) | 2016.06.10 |
[Spring Loaded] Spring Boot Hot Swapping (0) | 2016.06.10 |