web-dev-qa-db-ja.com

春のセキュリティ403エラー

Webのガイドに従って、Springセキュリティを使用してWebサイトを保護しようとしています。サーバー側では、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) {
}
}

私が非常に混乱したのは、サーバーがPOST/DELETEメソッドに応答しない一方で、GETメソッドが正常に機能することです。ところで、私はクライアント側で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)

私は数日間インターネットを検索しました。まだ手がかりがありません。助けてください。本当にありがとう

36
ken

この問題は、おそらく CSRF保護 が原因です。ユーザーがWebブラウザーでアプリケーションを使用しない場合は、 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(AuthenticationManagerBuilde r authManagerBuilder) throws Exception {
        authManagerBuilder
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("ADMIN");
    }
}
83
Rob Winch

「ヘッダー」を介して送信するトークンを確認し、そのトークンが存在するかどうかにかかわらず、データベースで同じトークンをクエリします。

:上記は、Spring Bootトークン認証メカニズムを使用している場合にのみ適用されます。