2016-07-05 19 views
1

私はSpring Bootアプリケーションを持っており、Spring Security(4.0.4)を使用しています。Spring Security 4:末尾のスラッシュを無視する方法

エンドポイントの現在のセキュリティー構成(Java)は、/some/endpointへの呼び出しを許可しますが、/some/endpoint/への呼び出しは許可しません。

私はここで検索しましたが、ドキュメンテーションを検索しましたが、末尾の空白を無視するスイッチはありません。例えば、Spring MVCので、私は次の操作を行うことができます。もちろん

@Configuration 
public class ServletConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void configurePathMatch(final PathMatchConfigurer configurer) { 
    configurer.setUseTrailingSlashMatch(false); 
    } 
} 

を、上記のコードは、私が何をしたいの行動反対を変更しますが、それはちょうど私がやってみたいもののデモンストレーションとしての役割を果たすスプリングセキュリティ。

マイ(縮小)セキュリティ設定:

@Bean 
public ResourceServerConfigurer resourceServerConfigurer(final ScopesProperties oauthProperties) { 
    return new ResourceServerConfigurerAdapter() { 
     @Override 
     public void configure(final HttpSecurity http) throws Exception { 
      http.sessionManagement().sessionCreationPolicy(NEVER).and() 
        .authorizeRequests() 
        .antMatchers(GET, "/foo") 
        .access(oauthProperties.getFooRead()) 
        .antMatchers(GET, "/bar/*") 
        .access(oauthProperties.getBarRead()) 
        .antMatchers(PUT, "/bar/*") 
        .access(oauthProperties.getBarWrite()) 
        // everything else 
        .anyRequest().denyAll(); 
     } 

私は、余分なものを持っ避けるために好きな私は、ほとんど同じ理由で、私は避けたいのですが、正規表現マッチャーを使用することができることを知っていますすべてのエンドポイントが末尾にスラッシュを付けて同じエンドポイントを承認するだけのルール。私はエラーが発生しやすいすべてのエンドポイントでそれを行う必要があります。また、私はアリマッチャーを使用し、パスを/foo/**に設定できることも知っています。問題は、異なる範囲のサブリソースを制御したい場合です。

それでは、Spring Securityに後続のスラッシュをグローバルに無視するように指示する方法は?誰かが同じ問題を抱えているだけの場合には、事前

答えて

1

おかげで、そのためのソリューションがあります。

問題は、私たちのセキュリティルールのみ/管理者を保護していることである:それは主要部であるMvcRequestMatcherと呼ばれる、あなたはここでSpring Documentation

にそれについてのすべてを読むことができます。 Spring MVCのすべての順列に対して追加のルールを追加できますが、これは非常に冗長で面倒です。

代わりに、Spring SecurityのMvcRequestMatcherを利用できます。以下の設定は、Spring MVCがURLと一致するようにSpring MVCを使用して一致させる同じURLを保護します。ここで

設定が今探している方法です。

@Bean 
public ResourceServerConfigurer resourceServerConfigurer(final ScopesProperties oauthProperties) { 
    return new ResourceServerConfigurerAdapter() { 
     @Override 
     public void configure(final HttpSecurity http) throws Exception { 
      http.sessionManagement().sessionCreationPolicy(NEVER).and() 
       .authorizeRequests() 
       .mvcMatchers(GET, "/foo") 
       .access(oauthProperties.getFooRead()) 
       .mvcMatchers(GET, "/bar") 
       .access(oauthProperties.getBarRead()) 
       .mvcMatchers(PUT, "/bar") 
       .access(oauthProperties.getBarWrite()) 
       // everything else 
       .anyRequest().denyAll(); 
    } 
関連する問題