-1

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 を一致させる方法

すみません、私の英語は下手です。

4

1 に答える 1

0

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 に必要なすべての構成ではありません。

于 2016-02-17T02:44:13.673 に答える