当前位置: 首页 > 知识库问答 >
问题:

HTTP状态405-不支持请求方法“POST”。Spring Security

易博文
2023-03-14

我有Spring MVC的Spring Security。当我尝试注册时,它给了我405个不支持的“帖子”。我已在安全配置中禁用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());
}
}

共有1个答案

邵兴文
2023-03-14

这个问题很容易解决,您将获得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);
}
} 
 类似资料:
  • 问题内容: 我收到此错误: 我正在尝试做的是创建一个带有下拉框的表单,该表单会根据在另一个下拉框中选择的其他值进行填充。例如,当我在框中选择一个名称时,应运行.jsp页面中的函数,然后提交提交的页面,然后在框中再次加载相应的值。 但是我收到此HTTP状态405错误。我在互联网上搜索了解决方案,但找不到任何有帮助的方法。这是我的代码的相关部分: jsp页面的一部分 控制器的一部分: 我怎么会得到这个

  • 我收到这个错误:< code>HTTP状态405 -不支持请求方法“POST ” 我想做的是创建一个带有下拉框的表单,该下拉框根据在另一个下拉框中选择的其他值进行填充。例如,当我在框中选择一个名称时,应该运行. jsp页面中的函数,然后提交的页面再次加载框中的相应值。 但是我收到此HTTP状态405错误。我已经在互联网上搜索了解决方案,但找不到任何有帮助的东西。以下是我的代码的相关部分: jsp页

  • 当我尝试实现Spring Security性时,出现以下错误- 控制器: web.xml Spring-security.xml 登录名。jsp 错误:- http://localhost:8080/EmployeeManagement/j_spring_security_check

  • 该场景是用户选择一些产品,然后单击进行支付。在这里,我将他/她重定向到IPG(银行互联网支付网关),并在付款完成和定稿时传递我的返回url。在我添加spring security之前,一切正常。 但是如果在一些内部视图中发布这个url,一切都会恢复正常。 这是正常工作(spring security启用,一切正常) 在浏览器中查看银行IPG的来源(https://pna.shaparak.ir/C

  • 我对Spring MVC项目有问题,当我尝试在控制器中调用post方法时,我得到“HTTP状态405-请求方法'POST'不支持”。我没有使用Spring安全。返回“index”是base jsp,并基于“view”属性更改视图。有人能找到我做错了什么? 控制器: JSP: 窗体对象:

  • 我使用的是Spring MVC(4.1.6 RELEASE)和Spring Security(4.0.1 RELEASE)。 当我尝试提交我的登录表单时,我收到“HTTP状态405-不支持请求方法'POST'”错误。 web.xml spring-security.xml form.html