Я хочу использовать диалект весенней безопасности, но когда я использую его теги, он вообще не работает. В любом случае он показывает содержимое 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/");
}
}
что вы имеете в виду под «зарегистрировать диалект»?
Только добавление зависимости мало что даст, вам нужно прописать диалект с движком тимелеафа в вашей конфигурации. Если вы не используете Spring Boot, который настроит его автоматически.
я обновил свой пост своим mvcConfig, где я настраиваю движок тимелеафа. Не могли бы вы привести пример, как мне настроить диалект?
почему вы используете 2.1.2.RELEASE и не встраиваете текущую версию весенней зависимости от безопасности, которая у вас есть? Кажется, что несоответствие зависимостей вызывает эту проблему.




Я предполагаю, что вы используете Spring Boot 2.1.X
Тогда вам нужно использовать версию 5:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
Все, что мне нужно, это эта строка:
springTemplateEngine.addDialect(new SpringSecurityDialect());
внутри конфигурации механизма шаблонов тимелеафа. Потому что диалекты должны быть зарегистрированы вручную.
Спасибо за этот пост. Помог мне
Мне тоже помогло!
Убедитесь, что вы используете правильную версию и зарегистрировали диалект.