2017-01-17 11 views
3

Я создаю сайт с использованием Spring Boot в первый раз. Я использую тестовую страницу, чтобы показать, что как только пользователь вошел в систему, слова, «идентифицированные» появится на экране, когда пользователь вошел в систему.Как получить загрузку Spring для синтаксического анализа тимелеафа-extras-springsecurity?

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org" 
     xmlns:sec="http://www.thymeleaf.org/extras/spring-security"> 
<head> 
    <meta charset="utf-8"/> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/> 
    <meta name="viewport" content="width=device-width, initial-scale=1"/> 
</head> 
<body> 
<h2>Thymleaf example</h2> 
<p sec:authorize="hasRole('ROLE_USER')"> 
    Authenticated 
</p> 
</body> 
</html> 

Однако проблема заключается в том, что тег с sec: авторизация остается неотредактированной и нерассмотренной. В результате, аутентифицированное слово появляется независимо от того, вошел ли пользователь в систему или нет. Это подтвердит печать пользовательских полномочий с контроллера.

В моем файле pom.xml есть следующие зависимости.

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.thymeleaf.extras</groupId> 
     <artifactId>thymeleaf-extras-springsecurity4</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    ... dependencies for mysql and jdbc are omitted. 

Любая помощь приветствуется. Примечание. Я использую Spring Boot, поэтому конфигурации JAVA предпочтительнее, чем XML-конфигурации.

ответ

1

Пожалуйста, попробуйте добавить что-то вроде следующего кода в @Configuration (или @SpringBootApplication) класса:

@Bean 
public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver, SpringSecurityDialect sec) { 
    final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.setTemplateResolver(templateResolver); 
    templateEngine.addDialect(sec); // Enable use of "sec" 
    return templateEngine; 
} 

Обратите внимание, что если вы заставляете Spring бутсу использовать Thymeleaf версии 3, вы должны заставить также версию 3 thymeleaf-extras-springsecurity4 зависимость:

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

Смотрите также this related answer.

+0

Ошибка в функции addDialect. 'Исключение в потоке "главный" java.lang.NoClassDefFoundError: орг/thymeleaf/диалект/IExpressionEnhancingDialect' и ' Вызванный: java.lang.ClassNotFoundException: org.thymeleaf.dialect.IExpressionEnhancingDialect' – needoriginalname

+0

Какую версию Thymeleaf вы с помощью? Кажется, что у вас нет кувшина тимелеафа в вашем пути к классу! Пожалуйста, убедитесь, что у вас есть следующие строки в pom.xml и очистить свой проект Maven: \t \t ' \t \t \t org.springframework.boot \t \t \t весна-загрузки-стартер-thymeleaf \t \t ' –

+1

Thymeleaf verison 3.0.2 с диалектом тимелеафа 2.1.1. Тег зависимости, который вы набираете, уже находится. Другие части сайта, над которым я работаю, используют только префикс «th». Это просто кажется тимелеаф-extra-springsecurity теги, которые являются проблемой. Это Pastebin для всего моего файла pom.xml, если вам нужно его увидеть: http://pastebin.com/TpteH3X4 – needoriginalname

0

1) Пожалуйста, добавьте следующее в свой файл prom.xml в тег для разрешения java.lang.ClassNotFoundException: org.thymeleaf.dom.Attribute Exeption.

<thymeleaf-layout-dialect.version>2.2.1</thymeleaf-layout-dialect.version> 

2) Добавить упомянутый в последнем посте, добавьте следующий компонент в свой WebSecurityConfig класс, который расширяет WebSecurityConfigurerAdapter

@Bean 
public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver, SpringSecurityDialect sec) { 
    final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.setTemplateResolver(templateResolver); 
    templateEngine.addDialect(sec); // Enable use of "sec" 
    return templateEngine; 
} 

3) Добавить следующую зависимость, обратите внимание, о версии, вам нужно, чтобы заставить 3.0.1.RELEASE версия

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