区块链技术博客
www.b2bchain.cn

Spring Security-405请求方法'POST'不支持 – java程序员分享

本文介绍了Spring Security-405请求方法'POST'不支持 – java程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我已经在项目中实现了Spring Security,但是当我尝试登录时却获得了状态405。我已经在csrf中添加了form令牌。

这是我发送用户名和密码时遇到的错误:
HTTP Status 405 - Request method 'POST' not supported

春季版本:4.0.2。发布

<div class="login-form">     <c:url var="loginUrl" value="/login" />     <form action="${loginUrl}" method="post" class="form-horizontal">         <c:if test="${param.error != null}">             <div class="alert alert-danger">                 <p>Invalid username and password.</p>             </div>         </c:if>         <c:if test="${param.logout != null}">             <div class="alert alert-success">                 <p>You have been logged out successfully.</p>             </div>         </c:if>         <div class="input-group input-sm">             <label class="input-group-addon" for="username">                 <i class="fa fa-user"></i>             </label>             <input type="text" class="form-control" id="username"                 name="clientusername" placeholder="Enter Username" required>         </div>         <div class="input-group input-sm">             <label class="input-group-addon" for="password">                 <i class="fa fa-lock"></i>             </label>             <input type="password" class="form-control" id="password"                 name="clientpassword" placeholder="Enter Password" required>         </div>          <input type="hidden" name="${_csrf.parameterName}"             value="${_csrf.token}" />          <div class="form-actions">             <input type="submit" class="btn btn-block btn-primary btn-default"                 value="Log in">         </div>     </form> </div> 

安全配置:

@Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter {      @Autowired     @Qualifier("G2BUserDetailsService")     UserDetailsService userDetailsService;      @Autowired     public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {         auth.userDetailsService(userDetailsService);     }      @Override     protected void configure(HttpSecurity http) throws Exception {       http.authorizeRequests()         .antMatchers("/", "/home").permitAll()         .antMatchers("/admin/**").access("hasRole('ADMIN')")         .and().formLogin().loginPage("/login")         .usernameParameter("clientusername").passwordParameter("clientpassword")         .and().csrf()         .and().exceptionHandling().accessDeniedPage("/Access_Denied"); //        .and().csrf().disable();     } 

控制器:

@RequestMapping(value = "/login", method = RequestMethod.GET) public ModelAndView loginPage() {     return new ModelAndView("login"); }  @RequestMapping(value="/logout", method = RequestMethod.GET) public String logoutPage (HttpServletRequest request, HttpServletResponse response) {     Authentication auth = SecurityContextHolder.getContext().getAuthentication();     if (auth != null){             new SecurityContextLogoutHandler().logout(request, response, auth);     }     return "redirect:/login?logout"; }   @RequestMapping(value = "/Access_Denied", method = RequestMethod.GET)     public ModelAndView accessDeniedPage(ModelMap model) {         model.addAttribute("user", getPrincipal());         return new ModelAndView("accessDenied");     }   @RequestMapping(value = "/admin", method = RequestMethod.GET)     public ModelAndView adminPage(ModelMap model) {         model.addAttribute("user", getPrincipal());         return new ModelAndView("admin");     }   private String getPrincipal(){         String userName = null;         Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();          if (principal instanceof UserDetails) {             userName = ((UserDetails)principal).getUsername();         } else {             userName = principal.toString();         }         return userName;     } 

关于此问题的几乎每个主题都说我们需要添加csrf令牌,但是我已经添加了。我想念什么吗?

参考方案

您可以为一个网址设置两个端点。但是您不能根据需要设置任何请求参数。当我看到您的登录请求映射时,可以这样设置请求方法:

@RequestMapping(value = "/login", method = { RequestMethod.GET, RequestMethod.POST }) public ModelAndView loginPage() {     return new ModelAndView("login"); } 

请求方法'POST'不支持,并且亚马逊弹性beantalk – java

尝试在具有Java注释(4.2.1版)的控制器中使用post方法,并在本地tomcat中成功使用,但是当我移至Amazon beantalk时,出现以下错误:日志:28-Sep-2015 10:34:11.339 WARNING [http-nio-8080-exec-10] org.springframework.web.servlet.PageNotFo…

Java-如何将此字符串转换为日期? – java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

将列表的python排序转换为Java代码。 – java

我正在尝试将将items列表排序为Java代码的python代码进行转换。如何在Java中进行这种排序?python code:import re items = ['10H', '10S', '2H', '3S', '4S', '6C',…

如何避免用户输入中的撇号 – java

因此,我正在将信息从.csv文件导入数据库。但是我在csv文件中用户输入的描述遇到了麻烦,因为它们包含的单引号破坏了SQL导入。我的导入语句是字符串sqlJob ="INSERT INTO job (ID, Job_Contact, Internal_Comment, Customer_Name," + " Duration, …

如何从php中获取datatables jQuery插件的json数据 – php

我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Spring Security-405请求方法'POST'不支持 – java程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们