我使用Spring安全AuthenticationSuccessHandler进行登录验证。
@Component
public class LoginAuthenticationHandler implements AuthenticationSuccessHandler {
….
我在LoginAuthenticationHandler中注入UserData,如下所示
@Autowired
UserData userData;
UserData应该是原型。
当我在LoginAuthenticationHandler中为不同的用户[在用户登录时间]打印userData的哈希码时,哈希码是相同的。它告诉我UserData bean不是原型。
这是spring-security.xml
中的LoginAuthenticationHandler定义<beans:bean id="authenticationSuccessHandler" class="com.org.login.handler.LoginAuthenticationHandler" scope="prototype">
</beans:bean>
这是UserData bean类
@Service
@Scope("prototype")
public class UserDataImpl implements UserData {
使UserData成为“真实”原型的选项是什么
答案 0 :(得分:2)
首先,您已经两次定义了LoginAuthenticationHandler bean(注释和XML),不要这样做。
如果要在单例bean中使用原型bean,则必须使用代理。改变范围注释:
@Scope(value="prototype", proxyMode=ScopedProxyMode.INTERFACES)
答案 1 :(得分:0)
显然,您正在使用LoginAuthenticationHandler
注释@Component
,使其成为自动发现的Spring bean,并在XML配置中声明它。由注释创建的bean将是单例,从XML创建的bean将是原型。您还没有展示过如何实际使用该bean,但可以理解系统的其余部分正在使用单例版本。当然,在创建单例时,该版本的单个UserData
实例被分配了一次。
要继续前进,请先使用LoginAuthenticationHandler
的声明清理情况。