2016-12-29 3 views
5

Я изо всех сил пытаюсь заставить Тимелеаф работать с Spring Security в моем проекте Spring Boot 1.4.3.Thymeleaf 3.0 Spring Boot + Интеграция безопасности не работает

Теги, например,

<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/37287903/4117061) –

ответ

11

Чтобы заставить его работать, если вы используете Thymeleaf 3.0.2 с Spring загрузкой 1.4, необходимо заставить версию 3.0.1.RELEASE из thymeleaf-extras-springsecurity4 (потому что он наследует версии 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> 

Также в шаблонах добавить пространство имен пружинными безопасности xmlns:sec="http://www.thymeleaf.org/extras/spring-security" и использовать hasRole вместо hasAuthority значение в <sec:authorize> тег:

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

Версия thymeleaf-extras-springsecurity4, унаследованная от Spring Boot, является 2.1.3. В конечном итоге это привело к тому, что версия 3.01 была выпущена. REELASE – 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.version>3.0.2.RELEASE</thymeleaf.version> 
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>