2013-07-03 35 views
9

gelen özel durum mesajı bir kullanıcı nedense devre dışıdır yanlış kimlik bilgileri veya kullanıcı ile giriş yapmaya çalıştığında SPRING_SECURITY_LAST_EXCEPTION.message ("Kötü Kimlik") görüntülemek mümkün. kullanıcı yerine söylemek "Kötü Kimlik" göstermez, devre dışı bırakıldığıBahar Güvenlik: UserDetailsService

Ben de "Sen devre dışı bırakılmış ... vesaire, vesaire ..." durum için özel bir mesaj görüntülemek ister. Bunu nasıl yaparım?

Bahar güvenliğinde kullanıcı adı/şifre sağlamak için UserDetailsService kullanıyorum.

+0

http://stackoverflow.com/questions/1373407/how-to-display-custom-error-message-in-jsp-for-spring-security-auth- adresinde açıklanan bir yaklaşımı denediniz mi? istisna? – Jk1

+0

Kısmen çalışır. Özel iletiler alabilirim, ancak her zaman AbstractUserDetailsAuthenticationProvider.badCredentials için yapılandırılan iletiyi döndürür. DisabledException'ı atmamıza rağmen, jsp sayfamda badCredentials için tanımlandığı gibi aynı mesajı alıyorum – Jayz

+0

Lütfen hangi sürümü kullandığınızı, hangi noktayı görüntülediğinizi ve mesajı görüntülediğiniz yeri açıklayın. Kullandığınız gerçek web güvenliği yapılandırmasını yüklerseniz muhtemelen en iyisidir. –

cevap

9

false AbstractUserDetailsAuthenticationProvider ait hideUserNotFoundExceptions özelliğini ayarlamanız gerekir. (Bu, bu çözümün gelecekte değişebilecek olan Spring Security koduna bağlı olduğu anlamına gelir). (Zaten o zaman bir tane false olarak hideUserNotFoundExceptions özelliğini ayarlarsanız)

(1) bir DaoAuthenticationProvider fasulye tanımlayın:

İşte adımlardır. Yukarıdaki sağlayıcı ile

@Bean 
public AuthenticationProvider daoAuthenticationProvider() { 
    DaoAuthenticationProvider impl = new DaoAuthenticationProvider(); 
    impl.setUserDetailsService(yourUserDetailsService()); 
    impl.setHideUserNotFoundExceptions(false) ; 
    return impl ; 
} 

(2) yapılandırın kimlik doğrulama yöneticisi: Aşağıda Java yapılandırma tarzıdır

<authentication-manager alias="authenticationManager"> 
    <authentication-provider ref="daoAuthenticationProvider"/> 
<!-- other providers if any --> 
</authentication-manager> 

(3) uzanan bir istisna oluşturun UsernameNotFoundException:

public class DisabledException extends UsernameNotFoundException { 

    public DisabledException(String msg) { 
    super(msg); 
    } 

    /* other constructors */  
} 

(4) senin UserDetailsService olarak, herhangi bir ileti anahtarla yukarıdaki istisna sizin gibi:

throw new DisabledException(messages.getMessage(
         "AbstractUserDetailsAuthenticationProvider.disabled", "User is disabled")); 
İşte

mesajlar SpringSecurityMessageSource.getAccessor()

+0

Ritesh, cevabınız için teşekkürler. Çalışılan kısım UserNotFoundException'ı gizliyordu. Ancak şimdi özel istisnamı farklı bir mesajla atsam bile "xyz ismiyle bir kullanıcı bulunamadı" mesajını alıyorum. – Jayz

+0

Üzgünüm, çok erken postalanmış. Bu mükemmel bir şekilde çalışır – Jayz

+0

Jayz, normal uygulama UserDetailsService yalnızca kullanıcı bulamadığınız zaman istisna atmaktır (varsayılan olarak BadCredentialsException ileti anahtarı AbstractUserDetailsAuthenticationProvider.badCredentials ile atılacaktır). Devre dışı bırakılmış kullanıcıyı belirtmek isterseniz, istisna atmamalısınız ve etkinleştirilmiş bayrağı olan kullanıcıyı yanlış olarak döndürmeniz gerekir (varsayılan olarak DisabledException, AbstractUserDetailsAuthenticationProvider.disabled adlı ileti anahtarı ile atılır). (Belki de bu benim cevabım ilk sırada olmalıydı) – Ritesh

0

, loginMessage.properties bu özellik dosyasında

gibi sınıf yolunda bir özellik dosyası oluşturun yanlıştır

AbstractUserDetailsAuthenticationProvider.badCredentials = Kullanıcı Adı/Şifre girmiş belirtmek olduğunu. Bundan sonra

throw new UsernameNotFoundException(""); 

boş sonuç ise

, userDao olarak, applicationContext.xml

<bean id="messageSource" 
    class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>loginMessage</value> 
     </list> 
    </property> 
</bean> 

aşağıdaki fasulye ekleyin, u girilen kullanıcı adı/Şifre gibi mesaj yanlıştır olsun. Kötü Kimlik Bilgileri yerine

İlgili konular