Диалект безопасности Thymeleaf Spring вообще не работает

Я хочу использовать диалект весенней безопасности, но когда я использую его теги, он вообще не работает. В любом случае он показывает содержимое sec:authorize независимо от того, аутентифицировано оно или нет.

вот пом:

 <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        </dependency>
<dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>

вот одна из моих страниц:

<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml"
      xmlns:th = "http://www.thymeleaf.org"
      xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head>
    <meta charset = "utf-8"/>
    <div th:replace = "fragments/header :: header-css"></div>
</head>
<body>
<div th:replace = "fragments/header :: header"/>
<div class = "container">
    <header>
        <h1 align = "center">
            Main Page
            <div class = "logout" sec:authorize = "hasAnyAuthority('ADMIN')">
                        <span id = "currentUserLogin" sec:authentication = "name" >
                            user temp
                        </span>
                <a href = "/logout">
                    <i class = "icon-off"></i>
                </a>
            </div>
        </h1>
    </header>
</div>
<div th:replace = "fragments/footer :: footer"/>
<script src = "/resources/jquery-1.8.1.min.js"></script>
</body>
</html>

он всегда показывает выход из системы с текстом «user temp», несмотря ни на что. Может ли кто-нибудь помочь мне понять, почему это происходит? Я использую cairo-sr7 для управления зависимостями.

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Cairo-SR7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

я думаю, мне нужно зарегистрировать диалект через механизм шаблонов, но как мне это сделать? вот мой webMvcConfig

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.rjproject"})
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCacheable(true);
        return templateResolver;
    }

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

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        return viewResolver;
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}

Убедитесь, что вы используете правильную версию и зарегистрировали диалект.

M. Deinum 23.04.2019 13:39

что вы имеете в виду под «зарегистрировать диалект»?

Ars 23.04.2019 13:43

Только добавление зависимости мало что даст, вам нужно прописать диалект с движком тимелеафа в вашей конфигурации. Если вы не используете Spring Boot, который настроит его автоматически.

M. Deinum 23.04.2019 14:00

я обновил свой пост своим mvcConfig, где я настраиваю движок тимелеафа. Не могли бы вы привести пример, как мне настроить диалект?

Ars 23.04.2019 14:31

почему вы используете 2.1.2.RELEASE и не встраиваете текущую версию весенней зависимости от безопасности, которая у вас есть? Кажется, что несоответствие зависимостей вызывает эту проблему.

ScanQR 23.04.2019 15:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
1 764
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я предполагаю, что вы используете Spring Boot 2.1.X

Тогда вам нужно использовать версию 5:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
Ответ принят как подходящий

Все, что мне нужно, это эта строка:

springTemplateEngine.addDialect(new SpringSecurityDialect()); 

внутри конфигурации механизма шаблонов тимелеафа. Потому что диалекты должны быть зарегистрированы вручную.

Спасибо за этот пост. Помог мне

Walid Ammou 23.09.2019 01:11

Мне тоже помогло!

springcorn 01.12.2020 04:02

Другие вопросы по теме