使用FreeMarker和Spring Security JSP标签
想做的事情
我想在FreeMarker上使用JSP标记(例如)。我想确认一下https://vorba.ch/2018/spring-boot-freemarker-security-jsp-taglib.html 中介绍的内容。
据说FreeMarker最初就具备使用JSP标签的功能。→ 参考URL
环境
-
- AdoptOpenJDK 11.0.5
-
- Spring Boot 2.2.2.RELEASE
Spring Security 5.2.1.RELEASE
Embedded Tomcat 9.0.29
FreeMarker 2.3.29
依赖性
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
</dependency>
</dependencies>
需要的是Spring Security JSP标签(spring-security-taglibs)和JSP API(tomcat-jsp-api)。
Java配置类
@Configuration
public class MyFreeMarkerConfig {
private final FreeMarkerConfigurer freeMarkerConfigurer;
public MyFreeMarkerConfig(FreeMarkerConfigurer freeMarkerConfigurer) {
this.freeMarkerConfigurer = freeMarkerConfigurer;
}
@PostConstruct
public void init() {
freeMarkerConfigurer.getTaglibFactory().setClasspathTlds(
Collections.singletonList("/META-INF/security.tld"));
}
}
关键是指定TLD文件的路径。
画面的表达方式
<#assign security=JspTaglibs["http://www.springframework.org/security/tags"]/>
<html>
<head>
<title>Index</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Index</h1>
<@security.authorize access="isAuthenticated()">
<p>Hello, <@security.authentication property="principal.username"/>!</p>
</@security.authorize>
<p><a href="/secret">Go to secret page</a></p>
<form action="/logout" method="post">
<input type="submit" value="Logout">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>
</body>
</html>
<#assign security=JspTaglibs[“http://www.springframework.org/security/tags”]/> 用于指定JSP标签。
使用标签时,请使用<@security.标签名称 属性名称=”属性值”>。