package br.com.algnologia.mvc.mudi;
import java.security.Principal;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
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.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
// configuração de autorização
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/home", true)
.permitAll()
)
.logout(logout -> logout.logoutUrl("/logout"));
}
// Utilizando o JDBC authentication para poder autenticar o usuário
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
// UserDetails user = User
// .builder()
// .username("maria")
// .password(encoder.encode("maria"))
// .roles("ADM")
// .build();
auth
.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(encoder);
// .withUser(user);
}
// autenticando usuario
// @Bean
// @Override
// public UserDetailsService userDetailsService() {
// UserDetails user = User.withDefaultPasswordEncoder().username("jose").password("jose").roles("ADM").build();
//
// return new InMemoryUserDetailsManager(user);
// }
// obs: o usuario n pode ser repetido duas vezes pois ira da erro no código
}