私はPOST
リクエストを送信するとき、私はWebSecurityConfigurerAdapter
を拡張するクラスを使用して、春のセキュリティを有効にすると、私はこのエラーを受け取るを有効にして、「405がサポートされていないGET」と言いますGET
は私がPOST
を送信しているときに許可されていません...私は何時間もこれを把握することができませんでした。POSTリクエストは、春のセキュリティは
下図のように私は私のメインクラスとWebSecurityConfigrerAdapter
クラスで@EnableWebSecurity
をコメントアウト場合、それは完全に正常に動作します:必要に応じて
@Configuration
@EnableResourceServer
@Order(-20)
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
private final AuthenticationManager authenticationManager;
@Autowired
public CustomWebSecurityConfigurerAdapter(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.parentAuthenticationManager(authenticationManager);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/images/**", "/fonts/**", "/videos/**")
.permitAll()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.authorizeRequests()
.antMatchers("/", "/join", "/login", "/about", "/contact", "/index.html")
.permitAll()
.and().authorizeRequests()
.anyRequest().authenticated()
.and().exceptionHandling()
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and()
.logout().logoutSuccessUrl("/index.html").permitAll()
.and()
.csrf().disable();
}
}
ここに私の春のコントローラは、方法によってです:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<BusinessUser> login(@RequestBody BusinessUser inputUser) {
BusinessUser requestedUser = businessUserService.findByUsername(inputUser.getUsername());
if(requestedUser != null)
if(BCrypt.checkpw(inputUser.getPassword(), requestedUser.getPassword()))
return new ResponseEntity<>(requestedUser, HttpStatus.OK);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
このコントローラも正常に動作し、POST要求を受け取ることができ、WebSecurityConfigurerAdapter
クラス(OAuth2.0とCSRF保護を後で有効にする必要がある)を除いてJSON形式のユーザー情報を返すことができます。
POSTリクエストを送信しているURLは? – 11thdimension
@ 11thdimension http:// localhost:8090/login –
@JakeMiller '/ login'にはクラスレベルで定義された別のルートが前置されていませんか?とにかくもちろん、ブラウザのバーにURLを書き込んでアクセスしようとすると、GETリクエストを行います。 POSTを行うにはAJAXを使用する必要があります。 – nbro