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

Spring Security/MVC/JPA-->不支持请求方法“POST”

钱毅
2023-03-14

使用Spring Security、Spring MVC和JPA从HTML登录时出现错误。

这是我的login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en" xmlns:th="http://www.thymeleaf.org">>
    <title>Spring Framework Guru</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body class="security-app">
<div class="details">
    <h2>Spring Security - App</h2>
</div>

<form action="/login" method="post">

    <div class="lc-block">
        <div>
            <input type="text" class="style-4" name="username"
                   placeholder="User Name" />
        </div>
        <div>
            <input type="password" class="style-4" name="password"
                   placeholder="Password" />
        </div>
        <div>
            <input type="submit" value="Sign In" class="button red small" />
        </div>
        <th:if test="${param.error ne null}">
            <div class="alert-danger">Invalid username and password.</div>
        </th:if>
        <th:if test="${param.logout ne null}">
            <div class="alert-normal">You have been logged out.</div>
        </th:if>
    </div>
    <input type="hidden" name="${_csrf.parameterName}"
           value="${_csrf.token}" />
</form>

</body>
</html>

这是WebSecurity类:

@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = CustomUserDetailsService.class)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private UserDetailsService userDetailsService;

@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService).passwordEncoder(passwordencoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/hello").access("hasRole('ROLE_ADMIN')")
            .anyRequest().permitAll()
            .and()
            .formLogin().loginPage("/login")
            .usernameParameter("username").passwordParameter("password")
            .and()
            .logout().logoutSuccessUrl("/login?logout")
            .and()
            .exceptionHandling().accessDeniedPage("/403")
            .and()
            .csrf();
}

@Bean(name = "passwordEncoder")
public PasswordEncoder passwordencoder() {
    return new BCryptPasswordEncoder();
}
}
@Service("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService {
private final UserRepository userRepository;
private final UserRolesRepository userRolesRepository;

@Autowired
public CustomUserDetailsService(UserRepository userRepository, UserRolesRepository userRolesRepository) {
    this.userRepository = userRepository;
    this.userRolesRepository = userRolesRepository;
}


@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userRepository.findByUserName(username);
    if (null == user) {
        throw new UsernameNotFoundException("No user present with username: " + username);
    } else {
        List<String> userRoles = userRolesRepository.findRoleByUserName(username);
        return new CustomUserDetails(user, userRoles);
    }
}

}

我总是有405个错误:

2016-10-16 12:15:30.710警告2932---[nio-8080-exec-3]O.s.web.servlet.PageNotFound:不支持请求方法“POST”

任何想法为什么不调用“configure(HttpSecurity http)”。我是不是漏掉了什么?

安德烈斯

共有1个答案

巴洲
2023-03-14

尝试添加

.formLogin().loginPage("/xxx").permitAll()
                .defaultSuccessUrl("/xxx")
                .failureUrl("/xxx?error")

此外

在Spring MVC应用程序中找不到控制器方法和页面的一个典型原因是Spring奇怪的映射约定,即通过在当前URL的末尾添加一个新链接(或表单action=“x”)来构建URL。'request Method POST Not Support'仅表示您的请求指向的地方没有任何东西接受POST request=>URL映射失败。在JSP站点上,您应该始终指定URL

<form action="${pageContext.request.contextPath}/login" method="post">
<c:url value="/login" var="loginUrl" />
<form action="${loginUrl}" method="post">
 类似资料:
  • 控制器中有以下代码 以及我的jsp中的以下代码。 当用户从cJobNms列表中选择选项时,所选值应显示在控制器方法showTestXsd中。请让我知道我做错了什么。 目前我收到一条消息:不支持请求方法“GET”

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

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

  • 该场景是用户选择一些产品,然后单击进行支付。在这里,我将他/她重定向到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: 窗体对象:

  • 我正在编写一个控制器来处理来自AJAX的帖子。我一直收到一个错误,那篇文章不受支持。我以前在尝试创建后控制器方法时从未遇到过以下错误,我希望有人能发现我在哪里搞砸了。 这是我为控制控制器中的帖子而编写的方法: 使用JQuery 1.10,这是请求它的Ajax调用: 我知道POST地址是正确的,因为将它转换成GET请求就可以了。此外,我还编写了其他POST请求,它们在同一个控制器类中也能正常工作。任