Проблемы в UserDetailsService в Spring Security - PullRequest
0 голосов
/ 25 мая 2011

Я использую пользовательский UserDetailsService для своих настроек безопасности Spring.У настроенного UserDetailsService есть только один метод, который переопределяет loadUserByUsername (конечное имя пользователя String) в UserDetailsService.

Ниже приведена конфигурация в applicationConext-security.xml:

<authentication-manager alias="myAuthenticationManager">
      <authentication-provider user-service-ref="userDetailsService"/>
</authentication-manager>

<beans:bean id="userDetailsService"
    class="temp.com.JpaUserDetailsService" />

Однако, когда я пыталсявойти в систему с именем пользователя Я получаю сообщение об ошибке, утверждая, что аргумент "имя пользователя" является нулевым.Интересно, откуда берется имя пользователя и как я могу избежать того, чтобы оно было нулевым?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Для этого есть несколько возможностей, и, поскольку вы не опубликовали трассировку стека, неясно, есть ли проблема в вашем коде или конфигурации:

  • Вы явно настроили цепочку фильтрови либо отсутствуют фильтры, либо имеют стандартные фильтры в неправильном порядке.
    • Предложение: замените собственную цепочку фильтров (временно) на цепочку по умолчанию и убедитесь, что она работает.
  • В вашем пользовательском UserDetailsService * есть ошибка
    • Предложение: используйте отладчик, чтобы проверить, какое имя пользователя вам передается).
  • Ваша форма входа (при условии, что вы используете аутентификацию на основе форм) не настроена с правильным именем пользователя/ поля пароля
    • Предложение: j_username и j_password являются стандартными именами полей (если вы не настроили их).Если вы используете JSF, GWT или какую-либо другую технологию пользовательского интерфейса, которая обрабатывает имена полей, вам необходимо учитывать это.
  • Возможно, что-то еще неправильно настроено
    • Предложение. Удалите пользовательскую службу UserDetailsService и замените ее стандартной простой службой в памяти , чтобы убедиться, что ваша базовая конфигурация работает, прежде чем дополнять ее пользовательскими данными.*

    Если вы можете опубликовать свою полную конфигурацию (особенно с указанием того, что вы настроили), я / мы можем предложить более точный совет, но я бы предположил, что одна из этих проблем, скорее всего, будет вашей проблемой.

0 голосов
/ 25 мая 2011

Здесь Вы пытаетесь внедрить свой userDetailsService в качестве провайдера аутентификации в менеджере аутентификации, что, я думаю, не правильно.

Это должно быть так:

<bean id="authenticationManager"   
class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
    <ref local="authenticationProvider" />
</list>
     </property>    
</bean>

<bean id="authenticationProvider" 
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider
">
<property name="userDetailsService" ref="userDetailsService" />     
</bean>

<beans:bean id="userDetailsService"     class="temp.com.JpaUserDetailsService" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...