SpringMVC、安らかなAPI
GET /注文/{注文ID}
POST /order/{orderId}/abc/{abcId}-{bcdId}
POST /order/{orderId}/myresource/{subResources:[a-zA-Z0-9_/]+}
role1 は api1 を呼び出すことができます role2 は api1 & api2 & api3 を呼び出すことができます
API パスの URL を一致させる方法
すみません、私の英語は下手です。
SpringMVC、安らかなAPI
GET /注文/{注文ID}
POST /order/{orderId}/abc/{abcId}-{bcdId}
POST /order/{orderId}/myresource/{subResources:[a-zA-Z0-9_/]+}
role1 は api1 を呼び出すことができます role2 は api1 & api2 & api3 を呼び出すことができます
API パスの URL を一致させる方法
すみません、私の英語は下手です。
Java ベースの構成を使用している場合は、次のようにすることができます。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.requestMatchers(new AntPathRequestMatcher("/order/*", HttpMethod.GET.name())).hasAnyRole("ROLE1", "ROLE2")
.requestMatchers(new AntPathRequestMatcher("/order/*/abc/*", HttpMethod.POST.name())).hasRole("ROLE2")
.requestMatchers(new AntPathRequestMatcher("/order/*/myresource/**", HttpMethod.POST.name())).hasRole("ROLE2");
}
}
これは、完全な Spring Security 構成ではなく、URL に適用できるロールベースの承認構成を示しているだけです。URL マッチング ロールの承認に関してはどうすればよいでしょうか。
他にも使用できる RequestMatcher 実装が多数あります。Ant パスのマッチングが十分でない場合は、独自のものを実装することもできます。
これを同じ結果で行うまったく別の方法は@EnableGlobalMethodSecurity
、構成ファイルでアノテーションを使用してグローバル メソッド セキュリティを有効にすることです。次に、サービス/エンドポイントで@Secured
、@PreAuthorize
または@PostAuthorize
アノテーションのいずれかを使用します。例えば:
@RequestMapping(value="/order/{orderId}", method=RequestMethod.GET)
@Secured(value = {"ROLE1", "ROLE2"})
public @ResponseBody Order getOrder(@PathVariable("orderId") String orderId) {
...
}
繰り返しますが、これはロール認証をエンドポイントに適用する方法を示しているだけであり、Spring Security に必要なすべての構成ではありません。