0

Spring Security 3.2.0.RC1 から 3.2.0.RC2 にアップグレードしました。RC1 ですべてが正常に機能しました。RC2 では、カスタム ログイン ページが機能しなくなりました。[ログイン] ボタンをクリックすると、ログイン ページが再表示されます。無効な資格情報が送信された (または資格情報がない) 場合も、エラー メッセージなしで再表示されます。資格情報が正しくない場合、エラー メッセージが正しく表示される前に。

興味深いのは、次のように変更した場合です。

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    // @formatter:off

    httpSecurity
        .authorizeRequests()
            .antMatchers("/restricted/**").hasRole("admin"))
            // all requests must be authenticated
            .anyRequest().authenticated()
    .and()
        .formLogin()
            .loginPage("/myLoginUrl.request")
            .failureUrl("/myLoginUrl.request?error")
            .permitAll()
    .and()
        .logout()
            .permitAll()
            .logoutSuccessUrl("/myLoginUrl.request")
    ;
    // @formatter:on
}

に:

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    // @formatter:off

    httpSecurity
        .authorizeRequests()
            .antMatchers("/restricted/**").hasRole("admin"))
            // all requests must be authenticated
            .anyRequest().authenticated()
    .and()
        .formLogin()
            .permitAll()
    .and()
        .logout()
            .permitAll()
            .logoutSuccessUrl("/myLoginUrl.request")
    ;
    // @formatter:on
}

デフォルトの Spring Security ログイン ページが表示され、機能します。デフォルト ページのソースを調べてカスタム ページと比較したところ、同じ名前のフィールドで同じアクションを呼び出しているようです。

デバッガーをステップ実行すると、AntPathMatcher.java で、パブリック ブール値の一致 (HttpServletRequest リクエスト) が見つかります。

String url = getRequestPath(request)

カスタム ログイン ページを使用すると、返される URL は「/error」です。getRequestPath() は、request.getPathInfo() に追加された request.getServletPath() を返すだけです。RC2 にアップグレードすると「/error」が返される理由がわかりません。

4

1 に答える 1