/** * Balero CMS Project: Proyecto 100% Mexicano de código libre. * Página Oficial: http://www.balerocms.com * * @author Anibal Gomez <anibalgomez@icloud.com> * @copyright Copyright (C) 2015 Neblina Software. Derechos reservados. * @license Licencia BSD; vea LICENSE.txt */ package com.neblina.balero.config; import com.github.dtrunk90.thymeleaf.jawr.JawrDialect; import com.neblina.balero.interceptors.ExecuteTimeInterceptor; import com.neblina.balero.interceptors.LocaleInterceptor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.core.env.Environment; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.i18n.SessionLocaleResolver; import org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect; import org.thymeleaf.spring4.SpringTemplateEngine; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import org.thymeleaf.templateresolver.TemplateResolver; import java.util.Locale; import java.util.Properties; @Configuration public class SpringConfig extends WebMvcConfigurerAdapter { private static final Logger log = LogManager.getLogger(SpringConfig.class.getName()); /** * Environment Variables (application.properties) */ @Autowired private Environment env; private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "classpath:/templates/", "classpath:/resources/templates/", }; @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/login").setViewName("login"); registry.addViewController("/offline").setViewName("offline"); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS); } @Bean public ClassLoaderTemplateResolver emailTemplateResolver(){ ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setPrefix("mail/"); templateResolver.setTemplateMode("HTML5"); templateResolver.setCharacterEncoding("UTF-8"); templateResolver.setOrder(1); return templateResolver; } @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:static/i18n/messages"); messageSource.setDefaultEncoding("UTF-8"); messageSource.setCacheSeconds(10); //reload messages every 10 seconds return messageSource; } @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); Properties mailProperties = new Properties(); mailProperties.put("mail.smtp.auth", env.getProperty("spring.mail.smtp.auth")); mailProperties.put("mail.smtp.starttls.enable", env.getProperty("spring.mail.smtp.starttls")); mailProperties.put("mail.smtp.starttls.required", env.getProperty("spring.mail.smtp.starttls")); mailSender.setJavaMailProperties(mailProperties); mailSender.setHost(env.getProperty("spring.mail.host")); mailSender.setPort(Integer.parseInt(env.getProperty("spring.mail.port"))); mailSender.setProtocol(env.getProperty("spring.mail.protocol")); mailSender.setUsername(env.getProperty("spring.mail.username")); mailSender.setPassword(env.getProperty("spring.mail.password")); return mailSender; } @Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); slr.setDefaultLocale(Locale.forLanguageTag("en")); return slr; } /** @Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); lci.setParamName("lang"); return lci; } **/ @Bean public LocaleInterceptor localeInterceptor() { LocaleInterceptor li = new LocaleInterceptor(); li.setParamName("lang"); return li; } /** * Interceptors * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeInterceptor()); //registry.addInterceptor(localeChangeInterceptor()); registry.addInterceptor(new ExecuteTimeInterceptor()); } /** * ThymeLeaf JAWR Integration With Additional Features * Based on: https://github.com/comsysto/spring-boot-demo-apps * spring-boot-thymeleaf-jawr * @author (c) 2016 Anibal Gomez */ @Bean public SpringTemplateEngine springTemplateEngine() { final SpringTemplateEngine engine = new SpringTemplateEngine(); engine.setMessageSource(messageSource()); engine.addDialect(new JawrDialect()); engine.addDialect(new SpringSecurityDialect()); engine.setTemplateResolver(templateResolver()); return engine; } @Bean public TemplateResolver templateResolver() { final TemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setTemplateMode("HTML5"); templateResolver.setPrefix("templates/"); templateResolver.setSuffix(".html"); templateResolver.setCacheable(false); return templateResolver; } }