web-dev-qa-db-ja.com

SpringSecurity-IP範囲をホワイトリストに登録

私が見た多くのリソースとスタックオーバーフローの質問は、.xmlファイルの使用に対する答えを提供します。

私が知りたいのは、XML構成を使用せずにSpring Securityを使用してIPアドレス範囲をホワイトリストに登録できるかどうかだけです。

以下は私のコントローラーの簡単な方法です:

@RequestMapping(value = "/makeit", method = RequestMethod.GET)
@ResponseBody
//@PreAuthorize("hasIpAddress('192.168.0.0/16')")
public String requestData() {

    return "youve made it";
}

セキュリティ設定用に別のクラスを作成しましたが、それほど多くはありません。EnableGlobalMethodSecurityアノテーション用に作成しただけです。これにより、@PreAuthorizeアノテーションを使用できるようになります(ここでの回答から) : @ PreAuthorizeアノテーションがスプリングセキュリティで機能していません )。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http
            .authorizeRequests()
                .anyRequest().access("hasIpAddress('0.0.0.0/0')");

        /*http
            .authorizeRequests()
                .anyRequest().hasIpAddress("0.0.0.0/0");*/

        /*http
            .authorizeRequests()
                .antMatchers("/**").hasIpAddress("0.0.0.0/0");*/

        /*http
            .authorizeRequests()
                .antMatchers("/**").access("hasIpAddress('0.0.0.0/0')");*/

        /*http
            .authorizeRequests()
                .anyRequest().access("hasIpAddress('0.0.0.0/0')");*/

    }
}

しかし、私が試したところ、(POSTMANを介して)次のように応答しました。

{
  "timestamp": 1486743507520,
  "status": 401,
  "error": "Unauthorized",
  "message": "Full authentication is required to access this resource",
  "path": "/makeit"
}

追加の事実:

私のIPアドレスはこの範囲内です。そして、私はSpringリリース1.3.1を使用しています(Spring Securityは4.0.3だと思います)。

7
rj2700

そのため、@ Durの助けを借りて、問題のトラブルシューティングを行うことができました。問題はSpringBootではありません(上記のすべてが正常に機能します)が、問題は、ユーザーがローカルでSpringアプリ(localhost:8080)にアクセスすると、localhostがIPv6アドレスを使用し、上記のコードがIPv4アドレスへのアクセスを許可することです。

IPv4アドレスをIPv6(またはTomcatのデフォルトに設定されているもの)に変更してSpringSecurityConfigファイルを変更する必要がありますORアプリへのアクセス方法を変更できます(127.0.0.1:8080に移動して) )。

注-これはローカルテスト専用です。アプリにアクセスするユーザー/サービスのIPアドレスをテストして取得する必要があります。

つまり、AuthenticationManagerBuilderを使用せずに上記のコードを使用することで、IP範囲をホワイトリストに登録できます。

3
rj2700