0

我有Spring MVC的Spring Security。当我尝试注册时,它给了我405'POST'不被支持。我在安全配置中禁用了csrf令牌。让我知道我哪里错了?HTTP状态405 - 不支持请求方法'POST'。 Spring Security

我的登录页面:

<#-- @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> 

授权由LoginController中处理:

@Controller 
public class LoginController { 

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

这里是我的春季安全配置类:

@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()); 
} 
} 

回答

-1

这一个很容易解决,您将获得HTTP状态405,这意味着(来自wiki):

所请求的资源不支持请求方法;例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。

您试图HTTP POST表单处理GET请求的处理程序。

只要改变这一点:

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

要这样:

@Controller 
public class LoginController { 

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