Je suis confronté à des problèmes avec le point de terminaison de sécurité / connexion de printemps.J'aimerais avoir une API d'authentification mais
lorsque je fais une demande de message au
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class ApplicationWebSecurityConfig extends WebSecurityConfigurerAdapter{ @Autowired private ApplicationUserService applicationUserService; @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(applicationUserService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
c'est la réponse
{ "timestamp":"2020-11-12T17:00:32.691+00:00", "status":404, "error":"Not Found", "message":"", "path":"/login" }
Ceci est ma classe de configuration
localhost:8080/login
4 Réponses :
J'ai eu un problème similaire avant, et je l'ai résolu en ajoutant un "/" à la fin de l'URL.
@Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers("/login/").permitAll() .anyRequest().authenticated(); }
alors le problème doit provenir du contrôleur
s'il provenait de la sécurité du ressort, il renverrait un HTTP 401 ou 403
Mais je pense que le point de terminaison de connexion est autoconfiguré par Spring Security, je n'ai pas de contrôleur
Veuillez vérifier votre contrôleur que vous entrez le chemin correct. Il n'y a aucun problème avec la configuration de sécurité.
mais Spring Security utilise ce point de terminaison par défaut pour la connexion, je n'ai aucun contrôleur dans ce projet
Ajoutez formlogin () à votre configuration:
http .csrf().disable() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .anyRequest().authenticated() .and().formLogin();
Vous n'aurez pas besoin de .antMatchers ("/ login"). PermitAll ().
Votre erreur semble ne pas avoir de point de terminaison de connexion. formLogin () s'occupe de sa génération.
J'ai découvert pourquoi !!
J'utilisais cette dépendance
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
et le bon pour mon but son
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> </dependency>
fonctionnent sur Tomcat autonome ou intégré?
il est intégré!