2017-02-03 1 views
2

In der Konfiguration meines Template-Engine springen würde Ich mag SpringSecurityDialect() wie hinzuzufügen:Wie füge ich Thymeleaf SpringSecurityDialect Boot

Der Typ:

@Bean 
public TemplateEngine templateEngine() { 
    SpringTemplateEngine engine = new SpringTemplateEngine(); 
    engine.addDialect(new SpringSecurityDialect()); 
    engine.setEnableSpringELCompiler(true); 
    engine.setTemplateResolver(templateResolver()); 
    return engine; 
} 

Allerdings sagt mir, eclipse org.thymeleaf.dialect.IExpressionEncingDialect kann nicht aufgelöst werden. Es wird indirekt von erforderlichen .class-Dateien referenziert

Was bedeutet das und wie kann ich es beheben?

In pom.xml ich habe:

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

Antwort

3

Es bedeutet, dass org.thymeleaf.extras:thymeleaf-extras-springsecurity4 eine Abhängigkeit org.thymeleaf:thymeleaf hat, wie Sie in dem obigen Link zu dem Repo sehen können. Anscheinend hast du diese Abhängigkeit nicht bereitgestellt. Die Klasse IExpressionEnhancingDialect ist da. Sie können dies beheben, indem Sie die Abhängigkeit zu Ihrem Projekt hinzufügen.

Da dies ein wenig kompliziert werden kann ... spiele ich auch mit Spring Boot, Spring Security und dem Sicherheitsdialekt für Thymol (plus Federdaten mit h2). Hier sind meine gradle Abhängigkeiten als Referenz, können sie Ihnen irgendwie helfen:

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") 
} 

Bitte beachte, dass ich thymeleaf 3 statt 2 verwendet werden soll, ist, warum gibt es einige zusätzliche unangenehme zwickt in meiner Konfiguration.

EDIT: Die Version von thymeleaf-extras-springsecurity4 sollte die gleiche wie thymeleaf.version sein, wie in der anderen Antwort vorgeschlagen.

+1

Vielen Dank. Es funktioniert jetzt. Ich musste die Version (3.0.1.RELEASE) zu thymeleaf-extras-springsecurity4 hinzufügen und änderte auch die Thymeleaf-Version von 3.0.2.RELEASE zu 3.0.1.RELEASE – user1583209

3

Da @Lachezar bereits beantwortet hat, müssen Sie diese fehlenden Abhängigkeiten hinzufügen. Aber die angegebene Version mit ext['thymeleaf.version'] = '3.0.0.RELEASE sollte die gleiche wie in den Kompilierabhängigkeiten sein, also verwenden Sie besser ext['thymeleaf.version'] = '3.0.1.RELEASE'.

Außerdem, bitte nicht, dass es ausreicht, nur eine Bean für den Sicherheitsdialekt anzugeben, ohne eine Bean für die Vorlagen-Engine bereitzustellen. Mit Thymeleaf auf dem Klassenpfad erkennt es automatisch, dass die Bean eine Instanz von IDialect ist, und fügt sie direkt den Dialekten hinzu:

@Bean 
public SpringSecurityDialect springSecurityDialect() { 
    return new SpringSecurityDialect(); 
} 
+0

Danke, Tom. Ich werde meine Antwort (und natürlich mein Spielzeugprojekt) so korrigieren, dass die Versionen identisch sind. –

Verwandte Themen