Estou criando uma API Rest para um aplicativo usando spring. Agora quero fazer o sistema de autenticação com JPA e um banco de dados postgres.
O que eu precisava é o seguinte:
Um endpoint POST onde o aplicativo envia um JSON com o Username e Password e o spring security libera o acesso caso esteja registrado no banco. Semelhante ao formLogin, mas por request.
Como eu poderia fazer algo assim?
Minha configuração de segurança do Spring:
@EnableWebSecurity
public class SpringWebSecurityConfiguration extends WebSecurityConfigurerAdapter{
@Autowired
private ImplementUserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception{
http.csrf().disable().authorizeRequests()
.antMatchers(HttpMethod.POST, "/login/register").permitAll()
.anyRequest().authenticated()
.and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.userDetailsService(userDetailsService)
.passwordEncoder(new BCryptPasswordEncoder());
}
@Override
public void configure(WebSecurity web) throws Exception{
web.ignoring().antMatchers("/materialize/**", "/style/**");
}
}
Neste caso, libero a solicitação de cadastro de novos usuários para que o aplicativo possa se cadastrar no banco de dados.
A requisição que quero usar será esta:
@PostMapping
@ResponseStatus(HttpStatus.ACCEPTED)
public Client authClient(@RequestBody ClientRequest client) {
return clientRepository.findByName(client.getName());
}
Resumindo: eu quero que essa requisição seja usada na configuração de segurança do spring para dar acesso ao usuário ao invés de usar o .formLogin
Variáveis do meu cliente:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
Oque eu poderia usar nesse caso ?