我正在为Spring安全设置使用自定义的UserDetailsService。 自定义UserDetailsService只有一个方法覆盖UserDetailsService中的loadUserByUsername(最终字符串用户名)。
我在applicationConext-security.xml中的配置如下:
<authentication-manager alias="myAuthenticationManager">
<authentication-provider user-service-ref="userDetailsService"/>
</authentication-manager>
<beans:bean id="userDetailsService"
class="temp.com.JpaUserDetailsService" />
但是,当我尝试使用用户名登录时,我收到错误消息,说“”用户名“为争议。我想知道用户名来自哪里,如何避免它为空?
答案 0 :(得分:2)
有几种可能性,并且由于您没有发布任何堆栈跟踪,因此不清楚问题是否在您的代码或配置中:
如果您可以发布完整配置(特别注意您所定制的任何内容),我/我们可以提供更精确的建议,但我建议其中一项最有可能是您的问题。
答案 1 :(得分:-1)
这里您试图将您的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" />