我有会话范围bean,其行为为请求范围bean。
我在Singleton bean中使用它,也许这就是为什么第二个请求有空值? 我用来设置bean的代码: 在单身人士中:
@Autowired
private MyBean myBean;
MyBean类:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public class MyBeanImpl implements MyBean, Serializable {
配置:
@Configuration
@ComponentScan(scopedProxy = ScopedProxyMode.INTERFACES, value = { "my.package.with.bean" })
public class ComponentsConfig {
}
MyBean很简单。与吸气剂和二传手。 在第一个请求中,我在该bean上设置了值,第二个请求在同一个类(singleton)中,我想读取这些值,但所有值都为null。没有办法让某些东西超过这些价值。
修改 我如何提出请求 - 它只是简单的浏览器请求,读取/写入会话bean的代码位于过滤器中。
这是单身人士:
@Service
public class SingletonBean {
@Autowired
private MyBean myBean;
// here I save the data to session scoped bean
private void saveUser(LdapContext ctx, String principal) throws NamingException {
Attributes attributes = getAttributes();
myBean.setId("id");
myBean.setName("name");
myBean.setEmail("email");
myBean.setTelNum("123");
myBean.setGroups(Lists.newArrayList("one", "two"));
myBean.setAddress("address");
}
// here I try to read data from session scoped bean:
@Override
protected AuthorizationInfo queryForAuthorizationInfo(PrincipalCollection principals,
LdapContextFactory ldapContextFactory) throws NamingException {
// here userInfo will be null
List<String> userInfo = myBean.getGroups();
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
for (String role : userInfo ) {
authorizationInfo.addRole(role);
}
return authorizationInfo;
}
}
当用户登录并进行身份验证时,我将其详细信息保存在会话bean中。当他尝试打开任何页面方法时,执行queryForAuthorizationInfo(在过滤器链之后)并且该对象中的值为null。