Endpoint REST di accesso personalizzato
Sto cercando di modificare l'endpoint di sicurezza di primavera POST / login predefinito per l'accesso a POST / api / users / login
Ho già provato a farlo
formLogin().loginProcessingUrl("/api/users/login")
o
formLogin().loginPage("/api/users/login")
ma non ha funzionato. Come lo faccio? Non riesco a trovare un tutorial che lo descriva o una risposta di overflow dello stack. Ho anche provato a leggere la documentazione di Spring Security ma non è stato d'aiuto.
La mia configurazione di sicurezza è simile a questa:
private final MyUserDetailsService myUserDetailsService;
private final PasswordEncoder passwordEncoder;
@Override
protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(myUserDetailsService).passwordEncoder(passwordEncoder);
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
//go from most restrictive url to least restrictive, from single urls to /**
httpSecurity.csrf().disable().cors().and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
//to allow h2 console page
httpSecurity.headers().frameOptions().disable();
}
Risposte
Nella classe WebSecurityConfigurerAdapter c'è da configurare metodi che dovresti sovrascrivere in questo modo:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(
unAuthorizedResponseAuthenticationEntryPoint)
.and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
http.addFilterBefore(authenticationTokenFilter,
UsernamePasswordAuthenticationFilter.class);
}
@Override
public void configure(WebSecurity webSecurity) throws Exception {
webSecurity
.ignoring().antMatchers(HttpMethod.POST, "/api/auth/login")
.antMatchers(HttpMethod.OPTIONS, "/**")
.and().ignoring()
.antMatchers(HttpMethod.GET, "/").and().ignoring();
}
}
Si prega di vedere nel metodo:
public void configure(WebSecurity webSecurity) throws Exception
la linea:
webSecurity.ignoring().antMatchers(HttpMethod.POST, "/api/auth/login")
Qui è dove metti il tuo endpoint API di autenticazione personalizzato!
E poi puoi procedere come ho spiegato nella seguente domanda Come utilizzare UserDetailService personalizzato in Spring OAuth2 Resource Server?