使用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.标签名称 属性名称=”属性值”>。

代码整体的情况

bannerAds