2010-03-20 4 views
7

Comment personnaliser les propriétés UsernamePasswordAuthenticationFilter usernameParameter (j_username) et passwordParameter (j_password) lors de l'utilisation de l'espace de noms <http ... /> Spring Security 3? C'est ma compréhension du <http ... /> crée le filtre, mais je ne vois pas comment le personnaliser.Spring Security 3- Comment personnaliser les paramètres de nom d'utilisateur/mot de passe?

+1

J'ai soumis une demande de fonctionnalité pour cela: http://jira.springframework.org/browse/SEC-1445 –

Répondre

4

est la solution Ici, je créé sur la base de la suggestion de axtavt:

configuration Spring:

<beans:bean id="userPassAuthFilterBeanPostProcessor" 
    class="com.my.package.UserPassAuthFilterBeanPostProcessor"> 
    <beans:property name="usernameParameter" value="username" /> 
    <beans:property name="passwordParameter" value="password" /> 
</beans:bean> 

classe Java:

package com.my.package; 

import org.springframework.beans.factory.config.BeanPostProcessor; 
import org.springframework.security.web.authentication. 
    UsernamePasswordAuthenticationFilter; 

public class UserPassAuthFilterBeanPostProcessor implements BeanPostProcessor { 

    private String usernameParameter; 
    private String passwordParameter; 

    @Override 
    public final Object postProcessAfterInitialization(final Object bean, 
     final String beanName) { 
     return bean; 
    } 

    @Override 
    public final Object postProcessBeforeInitialization(final Object bean, 
     final String beanName) { 
     if (bean instanceof UsernamePasswordAuthenticationFilter) { 
      final UsernamePasswordAuthenticationFilter filter = 
       (UsernamePasswordAuthenticationFilter) bean; 
      filter.setUsernameParameter(getUsernameParameter()); 
      filter.setPasswordParameter(getPasswordParameter()); 
     } 

     return bean; 
    } 

    public final void setUsernameParameter(final String usernameParameter) { 
     this.usernameParameter = usernameParameter; 
    } 

    public final String getUsernameParameter() { 
     return usernameParameter; 
    } 

    public final void setPasswordParameter(final String passwordParameter) { 
     this.passwordParameter = passwordParameter; 
    } 

    public final String getPasswordParameter() { 
     return passwordParameter; 
    } 

} 
1

Le filtre est configuré à l'aide de l'élément form-login, mais cet élément ne permet pas de définir des noms personnalisés pour le nom d'utilisateur et le mot de passe.

Vous pouvez configurer directement, comme décrit dans Spring Reference

+0

J'utilise l'espace de noms pour la quasi-totalité de ma configuration, donc je ne veux pas m'éloigner de l'utiliser. J'espérais qu'il y avait un moyen propre de le configurer et toujours utiliser la configuration . –

+0

Vous pouvez signaler un bug au printemps JIRA pour ajouter la configuration requise. – uthark

+0

Cela ressemble à ce que je dois faire. Je vais soumettre une demande de fonctionnalité. –

Questions connexes