私は今数日間苦労しています。私はSpring Bootの一種であり、XML構成を使用しないというアイデアが好きです。
RESTfullアプリケーションを作成しました(JSONを使用)。 このチュートリアル に従って、認証を適切に構成しています。
私はJava configurationを使用して、ほぼすべての構成を再現できたが、1つのことを除いて-AuthenticationEntryPoint
チュートリアルでは、このようにhttp
タグのプロパティを使用し、次の方法でformLoginを定義します。
_<http entry-point-ref="restAuthenticationEntryPoint">
<intercept-url pattern="/api/admin/**" access="ROLE_ADMIN"/>
<form-login
authentication-success-handler-ref="mySuccessHandler"
authentication-failure-handler-ref="myFailureHandler"
/>
<logout />
</http>
_
Spring Securityマニュアル のAuthenticationEntryPointの説明:
AuthenticationEntryPointは、<http>要素のentry-point-ref属性を使用して設定できます。
Java Configuration。を使用してそれを行う方法については何も言及していません。
formLoginを使用しているときにログインフォームへのリダイレクトを防ぐために、XMLなしで自分のrestAuthenticationEntryPoint
を「登録」するにはどうすればよいですか?
以下に、私が試したことを述べます。
皆さん、ありがとうございました。
私の試みでは、次のようにbasicAuthを使用して定義できることがわかりました:
_@Configuration
@Order(1)
public static class RestWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
if (restAuthenticationEntryPoint == null) {
restAuthenticationEntryPoint = new RestAuthenticationEntryPoint();
}
http
.authorizeRequests()
.antMatchers("/**").hasAnyRole(Sec.ADMIN,Sec.SUPER_USER)
...
.and()
.httpBasic()
.authenticationEntryPoint(restAuthenticationEntryPoint)
_
しかし、私はこのようなフォームログインを使用しています(httpBasic部分なし):
_ .and()
.formLogin()
.successHandler(mySavedRequestAwareAuthenticationSuccessHandler)
.failureHandler(simpleUrlAuthenticationFailureHandler)
_
問題は、資格情報を受け取らないとログインフォームにリダイレクトされることです。これはRESTサービスなので、そうすべきではありません。
ドキュメント for FormLoginConfigurer
(クラス.formLogin()
使用):
作成された共有オブジェクト
次の共有オブジェクトが読み込まれます
_AuthenticationEntryPoint
_
しかし、それをオーバーライドする方法を見つけることができませんでした。
何か案は?
P.S。
ログインフォームを、エラーのみを返すカスタムフォームにオーバーライドすることはお勧めできません。
あなたが提供した参考文献からの引用は、http.exceptionHandling()
を指しています。そこで共有エントリポイントを設定できます。
http.exceptionHandling().authenticationEntryPoint(myEntryPoint);