@My1Name

Почему не работает Thymeleaf аутентификация в Spring Security?

Почему не работает Thymeleaf аутентификация в Spring Security? При этом другие теги thymeleaf работают...
@Configuration
public class WebSecurityConfig implements WebMvcConfigurer {
........
@Bean
	public SpringResourceTemplateResolver setupViewResolver() {
		SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver ();
		resolver.setSuffix(".html");
		resolver.setCharacterEncoding("UTF-8");
		return resolver;
	}
	@Bean
	public SpringTemplateEngine templateEngine() {
	       SpringTemplateEngine templateEngine = new SpringTemplateEngine();
	       templateEngine.setTemplateResolver(setupViewResolver());
	       templateEngine.setEnableSpringELCompiler(true);
	       return templateEngine;
	}
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
	       ThymeleafViewResolver resolver = new ThymeleafViewResolver();
	       resolver.setTemplateEngine(templateEngine());
	       resolver.setCharacterEncoding("UTF-8");
	       registry.viewResolver(resolver);
	   }
}

WebApplicationInitializer
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
		 AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
	        root.scan("com.example");
	        servletContext.addListener(new ContextLoaderListener(root));
	        ServletRegistration.Dynamic appServlet = servletContext.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
	        appServlet.setLoadOnStartup(1);
	        appServlet.addMapping("/");
	        servletContext.addFilter("securityFilter", new DelegatingFilterProxy("springSecurityFilterChain"));
	}

В pom.xml
<dependency>
	<groupId>org.thymeleaf</groupId>
	<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
	<groupId>org.thymeleaf.extras</groupId>
	<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

Не работает именно аутентификация: <div sec:authorize="isAuthenticated()"> Оно выводится как обычная html разметка. Как это исправить?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
@My1Name Автор вопроса
Делаем по инструкции Thymeleaf и добавляем:
templateEngine.addDialect(new SpringSecurityDialect());
Класс конфигурации:
@Configuration
public class WebSecurityConfig implements WebMvcConfigurer {
........
@Bean
	public SpringResourceTemplateResolver templateResolver(){
	    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
	    templateResolver.setApplicationContext(servletContext);
	    templateResolver.setPrefix("/");
	    templateResolver.setSuffix(".html");
	    templateResolver.setTemplateMode(TemplateMode.HTML);
	    templateResolver.setCacheable(false);
	    return templateResolver;
	}
	@Bean
	public SpringTemplateEngine templateEngine(){
	    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
	    templateEngine.setTemplateResolver(templateResolver());
	    templateEngine.setEnableSpringELCompiler(true);
	    templateEngine.addDialect(new SpringSecurityDialect());
	    return templateEngine;
	}
	@Bean
    public ThymeleafViewResolver viewResolver(){
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        return viewResolver;
    }
}

В pom.xml всё что связано с Thymeleaf и аутентификацией:
<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</groupId>
	<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
	<groupId>org.thymeleaf.extras</groupId>
	<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

На странице index.html:
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns:th="http://www.thymeleaf.org" 
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы