Created
November 29, 2019 19:48
-
-
Save vinnom/c553595ab00d0f494a8e4c11d7501ed9 to your computer and use it in GitHub Desktop.
Pedindo Login no Finalizar Compra
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.springmvc.conf; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.Properties; | |
import java.util.concurrent.TimeUnit; | |
import org.springframework.cache.CacheManager; | |
import org.springframework.cache.annotation.EnableCaching; | |
import org.springframework.cache.guava.GuavaCacheManager; | |
import org.springframework.context.MessageSource; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.ComponentScan; | |
import org.springframework.context.support.ReloadableResourceBundleMessageSource; | |
import org.springframework.format.datetime.DateFormatter; | |
import org.springframework.format.datetime.DateFormatterRegistrar; | |
import org.springframework.format.support.DefaultFormattingConversionService; | |
import org.springframework.format.support.FormattingConversionService; | |
import org.springframework.mail.MailSender; | |
import org.springframework.mail.javamail.JavaMailSenderImpl; | |
import org.springframework.web.accept.ContentNegotiationManager; | |
import org.springframework.web.client.RestTemplate; | |
import org.springframework.web.multipart.MultipartResolver; | |
import org.springframework.web.multipart.support.StandardServletMultipartResolver; | |
import org.springframework.web.servlet.LocaleResolver; | |
import org.springframework.web.servlet.ViewResolver; | |
import org.springframework.web.servlet.config.annotation.*; | |
import org.springframework.web.servlet.i18n.CookieLocaleResolver; | |
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; | |
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver; | |
import org.springframework.web.servlet.view.InternalResourceViewResolver; | |
import com.google.common.cache.CacheBuilder; | |
import br.com.alura.springmvc.controllers.HomeController; | |
import br.com.alura.springmvc.daos.ProdutoDAO; | |
import br.com.alura.springmvc.infra.GravadorDeArquivos; | |
import br.com.alura.springmvc.models.CarrinhoCompras; | |
/* | |
* AppWebConfig | |
* Classe que define as configurações do Servlet | |
* | |
* */ | |
@EnableWebMvc // Permite a configuração do MVC | |
@ComponentScan(basePackageClasses = { HomeController.class, ProdutoDAO.class, GravadorDeArquivos.class, | |
CarrinhoCompras.class }) // Quais são as Classes a serem gerenciadas | |
@EnableCaching | |
//public class AppWebConfig implements WebMvcConfigurer { | |
public class AppWebConfig extends WebMvcConfigurerAdapter { | |
@Bean // Objeto instanciado e gerenciado pelo Spring | |
public InternalResourceViewResolver internalResourceViewResolver() { | |
InternalResourceViewResolver resolver = new InternalResourceViewResolver(); | |
resolver.setPrefix("/WEB-INF/views/"); | |
resolver.setSuffix(".jsp"); | |
resolver.setExposedContextBeanNames("carrinhoCompras"); | |
return resolver; | |
} // método que manipula prefixos e sufixos das Views | |
@Bean | |
public ViewResolver contentNegotiationViewResolver(ContentNegotiationManager manager) { | |
List<ViewResolver> viewResolvers = new ArrayList<>(); | |
viewResolvers.add(internalResourceViewResolver()); | |
viewResolvers.add(new JsonViewResolver()); | |
ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver(); | |
viewResolver.setViewResolvers(viewResolvers); | |
viewResolver.setContentNegotiationManager(manager); | |
return viewResolver; | |
} | |
@Bean | |
public MessageSource messageSource() { | |
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); | |
messageSource.setBasename("/WEB-INF/messages"); | |
messageSource.setDefaultEncoding("UTF-8"); | |
messageSource.setCacheSeconds(1); | |
return messageSource; | |
} // método que configura a fonte de mensagens e seu comportamento | |
@Bean | |
public FormattingConversionService mvcConversionService() { | |
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(); | |
DateFormatterRegistrar registrar = new DateFormatterRegistrar(); | |
registrar.setFormatter(new DateFormatter("dd/MM/yyyy")); | |
registrar.registerFormatters(conversionService); | |
return conversionService; | |
} // método que registra o formato padrão de data | |
@Bean | |
public MultipartResolver multipartResolver() { | |
return new StandardServletMultipartResolver(); | |
} // método que cria e configura o Resolver do Multipart | |
@Bean | |
public RestTemplate restTemplate() { | |
return new RestTemplate(); | |
} // método que configura o RestTemplate | |
@Bean | |
public CacheManager cacheManager() { | |
CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder().maximumSize(100).expireAfterAccess(1, | |
TimeUnit.MINUTES); | |
GuavaCacheManager cacheManager = new GuavaCacheManager(); | |
cacheManager.setCacheBuilder(builder); | |
return cacheManager; | |
} | |
@Override | |
public void addResourceHandlers(ResourceHandlerRegistry registry) { | |
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); | |
} | |
@Override | |
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { | |
configurer.enable(); | |
} | |
@Override | |
public void addInterceptors(InterceptorRegistry registry) { | |
registry.addInterceptor(new LocaleChangeInterceptor()); | |
} | |
@Bean | |
public LocaleResolver localeResolver() { | |
return new CookieLocaleResolver(); | |
} | |
@Bean | |
public MailSender mailSender() { | |
JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl(); | |
mailSenderImpl.setHost("smtp.gmail.com"); | |
mailSenderImpl.setUsername("alura.springmvc@gmail.com"); | |
mailSenderImpl.setPassword("alura2015"); | |
mailSenderImpl.setPort(587); | |
mailSenderImpl.setJavaMailProperties(mailProperties()); | |
return mailSenderImpl; | |
} | |
private Properties mailProperties() { | |
Properties mailProperties = new Properties(); | |
mailProperties.put("mail.smtp.auth", true); | |
mailProperties.put("mail.smpt.starttls.enable", true); | |
return mailProperties; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.springmvc.controllers; | |
import java.util.concurrent.Callable; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.context.annotation.Scope; | |
import org.springframework.mail.MailSender; | |
import org.springframework.mail.SimpleMailMessage; | |
import org.springframework.security.core.annotation.AuthenticationPrincipal; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.RequestMethod; | |
import org.springframework.web.client.RestTemplate; | |
import org.springframework.web.context.WebApplicationContext; | |
import org.springframework.web.servlet.ModelAndView; | |
import org.springframework.web.servlet.mvc.support.RedirectAttributes; | |
import br.com.alura.springmvc.models.CarrinhoCompras; | |
import br.com.alura.springmvc.models.DadosPagamento; | |
import br.com.alura.springmvc.models.Usuario; | |
@Controller | |
@RequestMapping("/pagamento") | |
@Scope(value = WebApplicationContext.SCOPE_REQUEST) | |
public class PagamentoController { | |
@Autowired | |
private CarrinhoCompras carrinho; | |
@Autowired | |
private RestTemplate restTemplate; | |
@Autowired | |
private MailSender sender; | |
@RequestMapping(value = "/finaliza", method = RequestMethod.POST) | |
public Callable<ModelAndView> finaliza(RedirectAttributes model, @AuthenticationPrincipal Usuario usuario) { | |
return () -> { | |
String uri = "http://book-payment.herokuapp.com/payment"; | |
try { | |
String respString = restTemplate.postForObject(uri, new DadosPagamento(carrinho.getTotalCompra()), | |
String.class); | |
enviaEmailConfirmacao(usuario); | |
model.addFlashAttribute("sucesso", respString); | |
return new ModelAndView("redirect:/produtos/listaProduto"); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
model.addFlashAttribute("falha", "Valor maior que o permitido"); | |
return new ModelAndView("redirect:/produtos/listaProduto"); | |
} | |
}; | |
} | |
private void enviaEmailConfirmacao(Usuario usuario) { | |
SimpleMailMessage mail = new SimpleMailMessage(); | |
mail.setSubject("Compra realizada com sucesso"); | |
mail.setTo(usuario.getEmail()); | |
mail.setText("Compra aprovada com sucesso no valor de " + carrinho.getTotalCompra()); | |
mail.setFrom("compras@casadocodigo.com.br"); | |
sender.send(mail); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package br.com.alura.springmvc.conf; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | |
import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | |
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; | |
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | |
import org.springframework.security.web.util.matcher.AntPathRequestMatcher; | |
import br.com.alura.springmvc.daos.UsuarioDAO; | |
@EnableWebSecurity | |
public class SegurancaConfig extends WebSecurityConfigurerAdapter { | |
@Autowired | |
private UsuarioDAO dao; | |
@Override | |
protected void configure(HttpSecurity http) throws Exception { | |
http.authorizeRequests().antMatchers("/produtos/cadastraProdutoForm").hasRole("ADMIN") | |
.antMatchers("/produtos/listaProduto").hasRole("ADMIN") | |
.antMatchers("/produtos/**").permitAll() | |
.antMatchers("/carrinho/**").permitAll() | |
.antMatchers("/resources/**").permitAll() | |
.antMatchers("/pagamento/**").permitAll() | |
.antMatchers("/").permitAll() | |
.anyRequest().permitAll() | |
.and().formLogin().loginPage("/login") | |
.defaultSuccessUrl("/produtos/listaProdutos").permitAll() | |
.and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll() | |
.logoutSuccessUrl("/login"); | |
} | |
@Override | |
protected void configure(AuthenticationManagerBuilder auth) throws Exception { | |
auth.userDetailsService(dao).passwordEncoder(new BCryptPasswordEncoder()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment