Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 24
Spring Security
Spring Security
● É um módulo do Spring com recursos avançados e de simples configuração
para ajudar com a segurança de uma aplicação.
● Tem foco principal na autenticação e na autorização.
● É altamente extensível.
● Num pequeno número de passos, é possível configurar uma autenticação via
base de dados ou mesmo por memória.
Autenticação
● A autenticação é o processo de verificação de identidade (digital) de um
utilizador.
● A autenticação pode ser feita através de uma combinação email e password, ou
então em situações mais avançadas através de um email de confirmação, sms,
impressão digital, validação de tokens, etc...
Autorização
● A autorização é o processo que valida o acesso de um utilizador a uma parte da
aplicação.
● Diz respeito aos privilégios que são concedidos a cada utilizador.
@Autowired
private LoginDetailsService loginDetailsService;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests()
.antMatchers("/countries").hasRole("ADMIN")
.antMatchers("/tasks").hasAnyRole("ADMIN", "USER")
.antMatchers("/").permitAll()
.and().formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder managerBuilder) throws Exception {
managerBuilder.userDetailsService(loginDetailsService);
@Bean
public PasswordEncoder getPasswordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
}
Exemplo com WebSecurityConfigurerAdapter
public class MyUserDetails implements UserDetails {
@Override
public boolean isAccountNonExpired () {
private String username ;
return true ;
}
public MyUserDetails (String username){
this.username = username;
@Override
}
public boolean isAccountNonLocked () {
return true ;
public MyUserDetails () {
}
}
@Override
@Override
public boolean isCredentialsNonExpired () {
public Collection <? extends GrantedAuthority > getAuthorities () {
return true ;
return Arrays .asList(new
}
SimpleGrantedAuthority( "ROLE_USER" ));
}
@Override
public boolean isEnabled () {
@Override
return true ;
public String getPassword () {
}
return "pass" ;
}
}
@Override
public String getUsername () {
return username ;
}
Exemplo com AuthenticationProvider
● A seguinte configuração adopta uma configuração diferente, mas também
válida.
● As principais diferenças entre a configuração anterior e a seguinte
Exemplo com AuthenticationProvider
@Component
public class MyAuthenticationProvider implements AuthenticationProvider {
@Autowired
LoginService loginService ;
@Override
public Authentication authenticate (Authentication authentication) throws AuthenticationException {
if(user != null){
List<GrantedAuthority > roleList = new ArrayList<>();
for(Permission permission : user.getPermissions()){
roleList .add(new SimpleGrantedAuthority( "ROLE_" +permission .getName()));
}
return new UsernamePasswordAuthenticationToken( username , password , roleList );
}
return null ;
}
@Override
public boolean supports (Class<?> authentication) {
return authentication.equals( UsernamePasswordAuthenticationToken .class);
}
}
Bibliografia
● https://spring.io/guides/gs/securing-web/
● http://shazsterblog.blogspot.com/2018/10/spring-security-authentication-secu
rity.html
● https://blog.algaworks.com/spring-security/
● https://www.baeldung.com/spring-security-authentication-provider