私が見た多くのリソースとスタックオーバーフローの質問は、.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だと思います)。
そのため、@ Durの助けを借りて、問題のトラブルシューティングを行うことができました。問題はSpringBootではありません(上記のすべてが正常に機能します)が、問題は、ユーザーがローカルでSpringアプリ(localhost:8080)にアクセスすると、localhostがIPv6アドレスを使用し、上記のコードがIPv4アドレスへのアクセスを許可することです。
IPv4アドレスをIPv6(またはTomcatのデフォルトに設定されているもの)に変更してSpringSecurityConfigファイルを変更する必要がありますORアプリへのアクセス方法を変更できます(127.0.0.1:8080に移動して) )。
注-これはローカルテスト専用です。アプリにアクセスするユーザー/サービスのIPアドレスをテストして取得する必要があります。
つまり、AuthenticationManagerBuilderを使用せずに上記のコードを使用することで、IP範囲をホワイトリストに登録できます。