216 - Spring Security – Java
216 - Spring Security – Java
Com uma vasta gama de funcionalidades, ele é flexível o suficiente para atender
às necessidades de segurança de aplicações empresariais, microserviços e
APIs.
Para garantir que seu projeto esteja atualizado e estável, recomenda-se o uso
de versões LTS, que oferecem suporte de longo prazo e manutenção estendida.
O Spring Boot evolui constantemente para oferecer uma base sólida para o
desenvolvimento de aplicações modernas. Para garantir compatibilidade,
escolha uma versão do Spring Boot que suporte as versões LTS do Java:
Maven:
<dependencies>
<!-- Dependência principal do Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
import org.springframework.context.annotation.Configuration;
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.WebSecurityConfigurerAdapt
er;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// Permite acesso público ao endpoint "/public"
.antMatchers("/public").permitAll()
// Exige autenticação para qualquer outro endpoint
.anyRequest().authenticated()
.and()
// Configura login customizado
.formLogin()
.loginPage("/login")
.permitAll()
.and()
// Configura logout
.logout()
.permitAll();
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests ->
authorizeRequests
// Permite acesso público ao endpoint "/public"
.antMatchers("/public").permitAll()
// Exige autenticação para qualquer outro endpoint
.anyRequest().authenticated()
)
.formLogin(formLogin ->
formLogin
// Configura página de login customizada
.loginPage("/login")
.permitAll()
)
.logout(logout ->
logout.permitAll()
);
return http.build();
}
}
http.csrf().disable();
Desabilitar o CSRF é uma prática comum em APIs, mas deve ser feito com
cuidado, garantindo que outras medidas de segurança, como tokens JWT,
estejam devidamente configuradas.
import javax.sql.DataSource;
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService(DataSource dataSource) {
return new JdbcUserDetailsManager(dataSource);
}
}
import static
org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors
.httpBasic;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@Test
public void testUnauthorizedAccess() throws Exception {
mockMvc.perform(get("/private"))
.andExpect(status().isUnauthorized());
}
@Test
public void testAuthorizedAccess() throws Exception {
mockMvc.perform(get("/private").with(httpBasic("user", "password")))
.andExpect(status().isOk());
}