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