如何将 Thymeleaf SpringSecurityDialect 添加到 spring 启动
How do I add Thymeleaf SpringSecurityDialect to spring boot
在我的模板引擎配置中,我想添加 SpringSecurityDialect(),例如:
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addDialect(new SpringSecurityDialect());
engine.setEnableSpringELCompiler(true);
engine.setTemplateResolver(templateResolver());
return engine;
}
然而 eclipse 告诉我:
The type org.thymeleaf.dialect.IExpressionEnhancingDialect cannot be resolved. It is indirectly referenced from required .class files
这是什么意思,我该如何解决?
在pom.xml
我有:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
这意味着 org.thymeleaf.extras:thymeleaf-extras-springsecurity4
对 org.thymeleaf:thymeleaf
有依赖性,正如您在上面的 repo 的 link 中看到的那样。显然你没有提供这种依赖。 class IExpressionEnhancingDialect
在那里。您可以通过将依赖项添加到您的项目来解决该问题。
因为这可能会有点复杂......我也在玩 Spring 引导,spring 安全和 thymeleaf 的安全方言(加上 spring 数据h2).这是我的 gradle 依赖项供参考,它们可能会以某种方式帮助您:
ext['thymeleaf.version'] = '3.0.1.RELEASE'
ext['thymeleaf-layout-dialect.version'] = '2.0.0'
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4:3.0.1.RELEASE")
compile("com.h2database:h2")
}
请注意,我想使用 thymeleaf 3 而不是 2,这就是为什么我的配置中有一些额外的令人不快的调整。
编辑: thymeleaf-extras-springsecurity4
的版本应与其他答案中建议的 thymeleaf.version
相同。
正如@Lachezar 已经回答的那样,您必须添加那些缺少的依赖项。但是 ext['thymeleaf.version'] = '3.0.0.RELEASE
的指定版本应该与编译依赖项中的相同,所以你最好使用 ext['thymeleaf.version'] = '3.0.1.RELEASE'
.
此外,请注意,只需为安全方言指定一个 bean 即可,而无需为模板引擎提供 bean。在类路径上使用 Thymeleaf,它会自动识别该 bean 是 IDialect 的实例并将其直接添加到方言中:
@Bean
public SpringSecurityDialect springSecurityDialect() {
return new SpringSecurityDialect();
}
在我的模板引擎配置中,我想添加 SpringSecurityDialect(),例如:
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addDialect(new SpringSecurityDialect());
engine.setEnableSpringELCompiler(true);
engine.setTemplateResolver(templateResolver());
return engine;
}
然而 eclipse 告诉我:
The type org.thymeleaf.dialect.IExpressionEnhancingDialect cannot be resolved. It is indirectly referenced from required .class files
这是什么意思,我该如何解决?
在pom.xml
我有:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
这意味着 org.thymeleaf.extras:thymeleaf-extras-springsecurity4
对 org.thymeleaf:thymeleaf
有依赖性,正如您在上面的 repo 的 link 中看到的那样。显然你没有提供这种依赖。 class IExpressionEnhancingDialect
在那里。您可以通过将依赖项添加到您的项目来解决该问题。
因为这可能会有点复杂......我也在玩 Spring 引导,spring 安全和 thymeleaf 的安全方言(加上 spring 数据h2).这是我的 gradle 依赖项供参考,它们可能会以某种方式帮助您:
ext['thymeleaf.version'] = '3.0.1.RELEASE'
ext['thymeleaf-layout-dialect.version'] = '2.0.0'
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4:3.0.1.RELEASE")
compile("com.h2database:h2")
}
请注意,我想使用 thymeleaf 3 而不是 2,这就是为什么我的配置中有一些额外的令人不快的调整。
编辑: thymeleaf-extras-springsecurity4
的版本应与其他答案中建议的 thymeleaf.version
相同。
正如@Lachezar 已经回答的那样,您必须添加那些缺少的依赖项。但是 ext['thymeleaf.version'] = '3.0.0.RELEASE
的指定版本应该与编译依赖项中的相同,所以你最好使用 ext['thymeleaf.version'] = '3.0.1.RELEASE'
.
此外,请注意,只需为安全方言指定一个 bean 即可,而无需为模板引擎提供 bean。在类路径上使用 Thymeleaf,它会自动识别该 bean 是 IDialect 的实例并将其直接添加到方言中:
@Bean
public SpringSecurityDialect springSecurityDialect() {
return new SpringSecurityDialect();
}