2017-06-02 8 views
0

私はスプリングブートを使用していますが、春のセキュリティには非常に新しいですが、私のウェブアプリケーションに基本的なセキュリティが必要でした。スプリングセキュリティ - データベースにアクセスしていません

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 

    auth 
      .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
      .antMatchers("/**","/event/**","/ticket/**") 
      .hasRole("USER") 
      .and() 
      .formLogin(); 
} 

}

私のWebアプリケーションを実行した後、私はどこに置いた私は、ログインページに実行します。私がやったことは私のpom.xmlに必要な依存関係を追加し、私のプロジェクトに、このJavaクラスを追加しましたユーザー/パスワードを入力してから、自分のWebアプリケーションに移動します。ただし、コマンドは機能しません。私は自分のMySqlデータベースに信号を送るべきいくつかのボタンを押していますが、何も起こりません。フロントエンドがバックエンドに接続されていないようです。フロントエンドにはAngularJSを、ページ間を移動するView Controllerは使用しています。アプリケーションの残りの部分はRESTベースです。なぜこのようなことが起こるのでしょうか?

後で編集:私が知っている問題は、認証後にエンドポイントに403個のステータスコードが表示されることです。どのように私はそれを修正するかもしれない任意のアイデア?

後でEditv2:私のPOSTリクエストで承認されないようですが、GETのものはうまくいきます。ここに私のPOSTエンドポイントのいくつかがあります:/ event/buy_ticket/{id}、/ ticket// cancel_ticket/{ID}

angular.min.js:101 POST http://localhost:8080/event/buy_ticket/2 403() 

私も明示的にそれを許可するように言ってみましたが、私はまだ403を取得...

http.authorizeRequests() 

.antMatchers("/**","/event/**","/ticket/**","/event/buy_ticket/2") 
      .permitAll() 
      .and() 
      .formLogin(); 

その後、後で、後で編集:

無効にCSRF働いた

+0

いいえ、authが動作します。その後問題が起こり、自分のページで何かをすると何も起こりません – Gimv13

+0

apiエンドポイントから403応答がありますか? –

+1

はい私は得ています403 – Gimv13

答えて

1

取得403禁止されているエラーコードは、Springがリクエストを受け取りましたが、処理を中止することを意味します。 WikiページからHTTP 403に:

認証が提供されましたが、認証されたユーザーは、 は、要求された操作を実行することが許可されていません。

私が賭けなければならないのは、どのリソースとエンドポイントにアクセス可能であるべきかを指定していないということです。メモリが私に正しければ、Spring Securityはデフォルトですべてをきつくロックするので、何をオープンにするかを明示する必要があります。以下は、私自身のセキュリティ設定のサンプルです:

@Override 
protected void configure(HttpSecurity http) throws Exception {  

    http 
    .authorizeRequests() // require authorization 
    .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() // for the CORS preflight check 
    .antMatchers("/login", "/api/open/**", "/resources/**").permitAll() // the open API endpoints and resources 
    .antMatchers("/logout", "/api/secured/**").authenticated(); // lock down these endpoints 

    ...additional configurations... 
} 

春のセキュリティで保護されなければならないすべてのエンドポイントが"/api/secured/"と前置きしている間、自由に利用可能であるべきであるすべてのエンドポイントが"/api/open/"と前置きされています。例外は、ログアウト・エンドポイントとログイン・エンドポイントです。これらは、Spring Securityに直接関連付けられているためです。

AngularJSでうまくいくSpring Securityを実装する方法を示す、blog post - と関連するrepo - ここでは、シングルページアプリケーションとしても安全であることが知られています。

編集:デフォルトでは、Spring Securityで有効になっているCSRF保護を実行している可能性があります。postを参照してください。CSRFは、GET、HEAD、OPTIONのようなHTTPの "安全な"メソッドを許可しますが、PUT、POST、DELETEなどのような安全でないメソッドをブロックします(CSRFが設定されていないため、 トークン→ブロック)。テスト目的のために、メソッドにhttp.csrf().disable()を追加することで無効にすることができます。

+1

はい、それはcsrfでした。どうもありがとうございました :) – Gimv13

関連する問題