2016-08-10 9 views
1

APIと管理インターフェイスを1つのアプリケーションに含むWebアプリケーションを構築しています。その結果、私はAPIのトークンベースの認証と、管理インターフェースのためのフォームベースの認証の2種類の認証が必要です。特定のルートにのみ認証フィルタを適用する、春のブートセキュリティ

APIトークンを認証するフィルタを適用することでほとんど機能しましたが、フィルタはすべてのリクエストに対して実行されていますが、 '/ api/**'と一致するパスでのみ実行します。

私のセキュリティ設定からは明らかに分かりますが、悲しいことに、期待通りに動作しません。

すべてのAPIリクエストは「/ api /」を開始し、すべての管理インターフェースリクエストは「/ admin /」を開始します。だから私は、それぞれに異なるセキュリティルールを適用することを望んでいた。

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers("/api/account/login").permitAll(); 
     http.addFilterBefore(webServiceAuthenticationFilter, UsernamePasswordAuthenticationFilter.class).authorizeRequests().antMatchers("/api/**").hasAuthority("APIUSER"); 

     http.authorizeRequests().antMatchers("/admin/**").authenticated().and() 
      .formLogin() 
       .loginPage("/admin/account/login").permitAll() 
       .passwordParameter("password") 
       .usernameParameter("username") 
       .failureUrl("/admin/account/login?error").permitAll() 
       .defaultSuccessUrl("/admin/dashboard") 
       .and() 
      .logout() 
       .logoutRequestMatcher(new AntPathRequestMatcher("/admin/account/logout")) 
       .logoutSuccessUrl("/admin/account/login"); 

     http.exceptionHandling().accessDeniedPage("/admin/account/forbidden"); 
    } 
+0

でドキュメントをご覧ください。私は[this](http://stackoverflow.com/q/38716703/4723795)トピックが面白いかもしれないと信じています。 – xenteros

答えて

0

ルートが「/ **/API」で一致したときに実行するためのフィルタコードを取得し、これはそれを行うための「正しい」方法であれば、私は知らないが、私は唯一に管理していますフィルタ自体にif文を追加します。

私のフィルタには次のものがあります。

AntPathMatcher urlMatch = new AntPathMatcher(); 
if (urlMatch.match("/api/**", httpRequest.getRequestURI().substring(httpRequest.getContextPath().length()))) { 
    // Token authentication in here 
} 
3

antMatcher(またはより高度な例でrequestMatchers)を使用して、URLに応じて、いくつかのHttpSecurity Sを設定する方法は(ないauthorizeRequestsに!)に直接HttpSecurityにあります。 https://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/config/annotation/web/builders/HttpSecurity.html#antMatcher-java.lang.String-

これは、定義された@Orderをいくつか定義して、指定されたURLと構成の順序に応じて最初の適切な構成を使用するようにする必要があります。詳細については、http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity

+0

ありがとう、それは私が必要とするもののように見えます。 – SheppardDigital

関連する問題