2016-12-29 64 views
5

我很難在基於Spring Boot 1.4.3的項目中使Thymeleaf與Spring Security一起工作。Thymeleaf 3.0 Spring Boot +安全集成不起作用

Tags like like

<div sec:authorize="hasAuthority('ADMIN')"> 

根本就沒有解析。

如果我嘗試手動添加SpringSecurityDialect這樣的:

@Bean 
public SpringSecurityDialect securityDialect() { 
    return new SpringSecurityDialect(); 
} 

我越來越:

Exception in thread "main" java.lang.NoClassDefFoundError: org/thymeleaf/dialect/IExpressionEnhancingDialect 

我已經包含在我的依賴關係如下:

<dependency> 
     <groupId>org.thymeleaf.extras</groupId> 
     <artifactId>thymeleaf-extras-springsecurity4</artifactId> 
    </dependency> 

的SpringSecurityDialect似乎沒有被自動配置添加。

手動添加Bean後,我得到了提到的異常。

這是一個錯誤還是我錯過了什麼?

我Thymeleaf版本:

<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> 
    <thymeleaf-extras-java8time.version>3.0.0.RELEASE</thymeleaf-extras-java8time.version> 
    <thymeleaf-layout-dialect.version>2.1.2</thymeleaf-layout-dialect.version> 
+1

*完整的堆棧跟蹤。 – chrylis

+1

檢查[這個答案](http://stackoverflow.com/a/372​​87903/4117061) –

回答

11

得到它的工作,如果你正在使用Thymeleaf 3.0.2與Spring 1.4的引導,需要強制的thymeleaf-extras-springsecurity43.0.1.RELEASE(因爲它繼承了2.1.2版本,它不結合Thymeleaf 3工作):

<dependency> 
    <groupId>org.thymeleaf.extras</groupId> 
    <artifactId>thymeleaf-extras-springsecurity4</artifactId> 
    <version>3.0.1.RELEASE</version> 
</dependency> 

這些標籤應該使用hasRole函數。

<div sec:authorize="hasRole('ROLE_ADMIN')"> 
2

如果您在使用Spring啓動,你只需要考慮以下依賴性:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.thymeleaf.extras</groupId> 
    <artifactId>thymeleaf-extras-springsecurity4</artifactId> 
    <version>2.1.2.RELEASE</version> 
</dependency> 
在模板

還增加了Spring的安全命名空間xmlns:sec="http://www.thymeleaf.org/extras/spring-security"和使用hasRole而不是hasAuthority<sec:authorize>標記:

<div sec:authorize="hasRole('ROLE_ADMIN')"> 
    ... 
</div> 
+3

從Spring Boot繼承的thymeleaf-extras-springsecurity4的版本是2.1.3。它最終通過強制版本爲3.0.1.RELEASE進行工作 – yglodt

1

我曾經有過同樣的問題。 Thymeleaf SpringSecurity只適用於版本3.x.x的thymeleaf,Spring-boot附帶的版本類似2.x.x atm。

仰望如何V3.XX添加到我的項目給我帶來了以下文檔頁: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-use-thymeleaf-3

所以你只需要添加你的依賴,然後添加在你的屬性覆蓋默認以下版本的thymeleaf到你的依賴關係:

<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> 
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>