0

J'ai Spring Security avec Spring MVC. Quand j'essaie de m'inscrire, cela me donne 405 'POST' non supporté. J'ai désactivé le jeton csrf dans la configuration de sécurité. Dites-moi où je me suis trompé?Statut HTTP 405 - La méthode de demande 'POST' n'est pas prise en charge. Spring Security

Ma page de connexion:

<#-- @ftlvariable name="error" type="java.util.Optional<String>" --> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<title>Log in</title> 
</head> 
<body> 
<nav role="navigation"> 
<ul> 
    <li><a href="/">Home</a></li> 
</ul> 
</nav> 

<h1>Log in</h1> 

<p>You can use: [email protected]/demo</p> 

<form role="form" action="/login" method="post"> 
<div> 
    <label for="email">Email address</label> 
    <input type="email" name="email" id="email" required autofocus/> 
</div> 
<div> 
    <label for="password">Password</label> 
    <input type="password" name="password" id="password" required/> 
</div> 
<div> 
    <label for="remember-me">Remember me</label> 
    <input type="checkbox" name="remember-me" id="remember-me"/> 
</div> 
<button type="submit">Sign in</button> 
</form> 
</body> 
</html> 

L'autorisation est gérée par LoginController:

@Controller 
public class LoginController { 

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public ModelAndView getLoginPage(@RequestParam Optional<String> error) { 
    return new ModelAndView("login", "error", error); 
} 
} 

Voici ma classe de configuration Spring Security:

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
private UserDetailsService userDetailsService; 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
      .antMatchers("/", "/public/**").permitAll() 
      .antMatchers("https://stackoverflow.com/users/**").hasAuthority("ADMIN") 
      .anyRequest().fullyAuthenticated() 
      .and() 
      .formLogin() 
      .loginPage("/login") 
      .failureUrl("/login?error") 
      .usernameParameter("email") 
      .passwordParameter("password") 
      .permitAll() 
      .and() 
      .logout() 
      .logoutUrl("/logout") 
      .deleteCookies("remember-me") 
      .logoutSuccessUrl("/") 
      .permitAll() 
      .and() 
      .rememberMe().and().csrf().disable(); 
} 

@Override 
public void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth 
      .userDetailsService(userDetailsService) 
      .passwordEncoder(new BCryptPasswordEncoder()); 
} 
} 

Répondre

-1

Celui-ci est facile à résoudre, vous obtenez le statut HTTP 405 qui signifie (du wiki):

Une méthode de demande n'est pas prise en charge pour la ressource demandée; par exemple, une requête GET sur un formulaire nécessitant la présentation de données via POST ou une requête PUT sur une ressource en lecture seule.

Vous essayez de HTTP POST un formulaire pour un gestionnaire qui gère les requêtes GET.

changer Simplement ceci:

@Controller 
public class LoginController { 
@RequestMapping(value = "/login", method = RequestMethod.GET) 
public ModelAndView getLoginPage(@RequestParam Optional<String> error) { 
    return new ModelAndView("login", "error", error); 
} 
} 

à ceci:

@Controller 
public class LoginController { 

@RequestMapping(value = "/login", method = RequestMethod.POST) 
public ModelAndView getLoginPage(@RequestParam Optional<String> error) { 
    return new ModelAndView("login", "error", error); 
} 
}