Профиль пользователя заблокирован сроком с 24 марта 2024 г. и навсегда по причине: систематические нарушения пункта 5.2 правил сервиса
Ответы пользователя по тегу Thymeleaf
  • Сформировать вывод на страницу Thymeleaf?

    @My1Name
    Кладёте пользователей со всеми полями в List<Person> data передаёте на представление через model.addAttribute("Person", data);и выводите с помощью Thymeleaf итератора. Например так:
    <div th:each="user : ${Person}">
    <span th:text="${user.name}"></span>
    <span th:text="${user.date}"></span>
    <span th:text="${user.role}"></span>
    <span th:text="${user.description}"></span>
    </div>

    В данном примере, поля объекта Person с модификатором доступа - public.
    Как перебрать List<?> средствами Thymeleaf?
    Ответ написан
    1 комментарий
  • HTTP Status 500 Spring Thymeleaf, в чем причина ошибки?

    @My1Name
    В классе SpringConfig:
    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(servletContext);
        templateResolver.setPrefix("/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false); // отключаем везде кэш на время разработки 
        return templateResolver;
    }
    @Bean
    public SpringTemplateEngine templateEngine(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }
    @Bean
    public ThymeleafViewResolver viewResolver(){
    	ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    	viewResolver.setTemplateEngine(templateEngine());
    	viewResolver.setCharacterEncoding("UTF-8");
    	return viewResolver;
    }

    Вместо jakarta.servlet и thymeleaf-spring6 в poom.xml
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter</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>javax.servlet</groupId>
    	<artifactId>javax.servlet-api</artifactId>
    	<scope>provided</scope>
    </dependency>
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
    </dependency>

    Класс MySpringMvcDispatcherServletInitializer можно (и нужно) удалить.

    Под Spring6 - Spring Security (если я не ошибаюсь) - ещё не работает.
    Ответ написан
  • Как при удачной авторизации изменить кнопку Log In на кнопку Log Out и скрыть кнопку от обычных пользователей?

    @My1Name
    Вам нужен CustomAuthenticationProvider, а не CustomUserDetails. Там делегируются права (role) пользователям при аутентификации.

    Вот это вот лишнее:
    @PostMapping("/process_register")
        public String processRegister(User user) {
            BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
            String encodedPassword = passwordEncoder.encode(user.getPassword());
            user.setPassword(encodedPassword);
            user.setRole("USER");
            userRepo.save(user);
            return "register_success";
        }

    Возможно имеет смысл в экспериментальных (в учебных) целях, но на практике это лишнее... PasswordEncoder достаточно добавить 1 раз через RegisterGlobalAuthentication в классе WebSecurityConfig; а также добавив соответствующий бин:
    @Bean
    public PasswordEncoder pass(){
    return new BCryptPasswordEncoder();
    }

    После регистрации, если она прошла успешно, обычно делается autoLogin через SecurityContextHolder и return "redirect:/index";

    Если вы хотите шифровать данные в БД, то имеет смысл вынести BCryptPasswordEncoder() в глобальную переменную (в final поле) на уровне класса - контроллера.

    Смысл PasswordEncoder() в Spring Security заключается в том, что на время сессии создаётся "хэш-отпечаток" (цифровая подпись) кроме прочей информации в памяти... Его в принципе невозможно декодировать не зная реальный пароль и правила преобразования. Поэтому без него Spring Security и не работает.

    Вот старая модель CHA-1 кодирования в соответствии со спецификацией Oracle к PasswordEncoder. А BCryptPasswordEncoder использует более новые и более продуманные алгоритмы.
    Ответ написан
    Комментировать
  • Как вернуть страницу с id в Spring?

    @My1Name
    Как вернуть страницу с id в Spring?

    В первую очередь нужно понять, что страница с id - это ссылка с параметрами. Ссылка - указывает на страницу, а параметры - на объект.

    В пост-методе контроллера "/routes/edit-all-sequence/{id}/" выделяет, как не соответствующую страницу MVC.

    Страница у вас одна. Меняются только значения связанные с объектом.

    Если вы используете redirect, то вместо Model используйте RedirectAttributes или ModelAndView. Тогда ваш код будет выглядеть следующим образом:model.addFlashAttribute("sequenceGapError", true); и будет автоматически распространяться на «выходной» FlashMap текущего запроса.

    Прежде чем делать перенаправление, попробуйте вернуть стандартную страницу:
    return "/routes/edit-all-sequence/"; По идее должна вернуться страница с параметрами {id} текущего запроса и, никакой redirect вам не нужен.
    Ответ написан
    Комментировать
  • Как средствами Thymeleaf вывести html переменную в JavaScript?

    @My1Name Автор вопроса
    <script th:inline="javascript">
    var htmlVariable = /*[#th:block th:utext="${htmlText}"/]*/;
    </script>
    Html текст нужно предварительно взять в 'одинарные' кавычки. Иначе JavaScript не будет работать.

    Более простой вариант:
    var htmlVariable = /*[[${htmlText}]]*/ 'value'; при этом 'value' будет заменено ${htmlText} содержанием. Однако, могут быть проблемы с UTF-8.

    Самый простой вариант:
    <script th:inline="javascript">
    var htmlVariable = '[(${htmlText})]';
    </script>
    Ответ написан
    Комментировать
  • Почему не работает Thymeleaf аутентификация в Spring Security?

    @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">
    Ответ написан
    Комментировать