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");
}
HttpSecurityで(!ではなく)直接(またはより高度な場合)HttpSecurity
を使用して、URLに応じていくつかのを構成する方法があります。参照:https://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/config/annotation/web/builders/HttpSecurity.html#antMatcher-java.lang.String-antMatcher
requestMatchers
authorizeRequests
これには、Springが指定されたURLと構成の順序に応じて最初の適切な構成を使用するように、WebSecurityConfigurerAdapter
定義済み@Order
のでいくつかのを定義する必要があります。詳細については、http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurityのドキュメントをご覧ください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加