1. ホーム
  2. spring

[解決済み] Spring Security 403エラー

2023-04-19 15:17:01

質問

Web上のガイドに従って、Spring securityを使用して自分のウェブサイトを保護しようとしています。私のサーバー側では、WebSecurityConfigurerAdapterとコントローラは次のようになります。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
implements ApplicationContextAware {

@Override
protected void registerAuthentication(AuthenticationManagerBuilde r authManagerBuilder) throws Exception {
authManagerBuilder.inMemoryAuthentication()
.withUser("user").password("password").roles("ADMI N");
}
}

@Controller
//@RequestMapping("/course")
public class CourseController implements ApplicationContextAware{

@RequestMapping(value="/course", method = RequestMethod.GET, produces="application/json")
public @ResponseBody List<Course> get(// The critirion used to find.
@RequestParam(value="what", required=true) String what,
@RequestParam(value="value", required=true) String value) {
//.....
}

@RequestMapping(value="/course", method = RequestMethod.POST, produces="application/json")
public List<Course> upload(@RequestBody Course[] cs) {
}
}

私が非常に混乱したのは、GETメソッドは問題なく動作するのに、POST/DELETEメソッドにサーバーが応答しないことです。ちなみに、クライアント側でRestTemplateを使用しています。例外はあります。

Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 403 Forbidden
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:574)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:530)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:487)
    at org.springframework.web.client.RestTemplate.delete(RestTemplate.java:385)
    at hello.Application.createRestTemplate(Application.java:149)
    at hello.Application.main(Application.java:99)

何日もネットで検索してみたが まだ手がかりがありません。どうか助けてください。本当にありがとうございます。

どのように解決するのですか?

この問題の原因は、おそらく CSRF保護 . ユーザーがウェブブラウザでアプリケーションを使用しない場合。 であれば、CSRFを無効にするのが安全です。 の保護を無効にしても問題ありません。そうでない場合は リクエストにCSRFトークンを含める .

への CSRF保護を無効にする を使用することができます。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig
    extends WebSecurityConfigurerAdapter implements ApplicationContextAware {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // ...
            .csrf().disable();
    }

    @Override
    protected void registerAuthentication(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
        authManagerBuilder
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("ADMIN");
    }
}