【问题标题】:HTTP Status 405 - Request method 'POST' not supported. Spring SecurityHTTP 状态 405 - 不支持请求方法“POST”。春季安全
【发布时间】:2017-11-07 09:18:34
【问题描述】:

我有带有 Spring MVC 的 Spring Security。当我尝试注册时,它给了我 405 'POST' not supported。我在安全配置中禁用了 csrf 令牌。让我知道我哪里出错了?

我的登录页面:

<#-- @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: demo@localhost / 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);
}
}

这是我的 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("/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());
}
}

【问题讨论】:

    标签: spring-mvc login spring-security freemarker http-status-code-405


    【解决方案1】:

    这个很容易解决,你得到的是 HTTP 状态 405,这意味着(来自 wiki):

    请求的资源不支持请求方法;例如,表单上的 GET 请求需要通过 POST 呈现数据,或只读资源上的 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);
    }
    } 
    

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 2016-11-11
      • 2015-06-26
      • 1970-01-01
      • 2012-06-24
      • 2015-05-01
      • 2015-04-09
      • 2016-03-29
      • 2014-09-24
      相关资源
      最近更新 更多