【问题标题】:Spring Boot Security Request method 'POST' not supported不支持 Spring Boot 安全请求方法“POST”
【发布时间】:2018-08-14 16:26:44
【问题描述】:

我正在使用 Spring Boot 安全性来处理登录功能。我不知道登录的 post 方法根本不起作用。它总是会抛出以下异常。

There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'POST' not supported

有人可以建议吗?这是我的代码。您也可以从GitHub 找到它。

安全配置

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll().and().csrf().disable();
    }

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

家庭控制器

@Controller
public class HomeController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = { "/", "/login" }, method = RequestMethod.GET)
    public ModelAndView login(Model model) {
        ModelAndView modelAndView = new ModelAndView("auth/login");
        User user = new User();
        modelAndView.addObject(user);
        return modelAndView;
    }
}

登录.html

<form class="form-horizontal" role="form" th:action="@{login}" method="post">
    <div class="form-group">
        <label class="col-md-4 control-label">Username</label>

        <div class="col-md-6">
            <input type="text" class="form-control" name="username" th:placeholder="Username"/>
        </div>
    </div>

    <div class="form-group">
        <label for="password" class="col-md-4 control-label">Password</label>

        <div class="col-md-6">
            <input type="password" class="form-control" name="password" th:placeholder="Password"/>
        </div>
    </div>


    <div class="form-group">
        <div class="col-md-6 col-md-offset-4">
            <button type="submit" class="btn btn-primary">
                <i class="fa fa-btn fa-sign-in"></i> Login
            </button>

        </div>
    </div>

    <div align="center" th:if="${param.error}">
        <p style="font-size: 20; color: #FF1C19;">Email or Password invalid, please verify</p>
    </div>
</form> 

【问题讨论】:

  • 通过更新配置解决,如下所示。 http.authorizeRequests().antMatchers("/resources/**", "/", "/register").permitAll().anyRequest().authenticated() .and().csrf().disable() .formLogin().loginPage("/login").defaultSuccessUrl("/dashboard").usernameParameter("username") .passwordParameter("password").failureUrl("/login?error=true").permitAll().and().logout().permitAll();
  • 我也面临同样的问题。 stackoverflow.com/questions/69450810/…你能提出问题吗?
  • 另外你是从哪里发现在登录过程中调用 POST 进行身份验证的?

标签: java spring-boot spring-security login


【解决方案1】:

您的登录功能只接受 GET 请求。您应该将 GET 更改为 POST

@RestController
public class HomeController {
   @Autowired
   private UserService userService;

   @RequestMapping(value = { "/", "/login" }, method = RequestMethod.POST)
   public ModelAndView login(Model model) {
       ModelAndView modelAndView = new ModelAndView("auth/login");
       User user = new User();
       modelAndView.addObject(user);
       return modelAndView;
   }
}

【讨论】:

  • 不,它没有用。我记得spring boot security接管了登录方法的post请求。但我就是不知道怎么配置。
  • 我编辑了我的答案。我将控制器更改为 RestController。请试试这个
  • 感谢您的帮助。我试过但没有运气。我从blog 中读到,spring boot 安全性将接管发布请求,验证用户凭据,然后重定向到另一个页面。不需要控制器中的 post 方法,只需要更改配置文件即可。但是不知道怎么修改配置文件。
【解决方案2】:

您应该像这样更改您的 Homecontroller 登录方法:

@RequestMapping(value = { "/", "/login" }, method = RequestMethod.POST)
public ModelAndView login(Model model) {

或者你也可以使用:

@PostMapping( value = { "/", "/login" })

【讨论】:

  • 我之前试过。它没有用。我记得 Spring Boot Security 接管了它并很好地验证了用户的凭据。
猜你喜欢
  • 2018-06-03
  • 2020-03-31
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多