Java 在Spring中存储bean实例
我的web应用程序中有一个身份验证方法,它从另一个应用程序获取http参数。我从数据库加载用户并将其存储在Springbean中。在我的登录控制器中,它是实例化的,但当我将它注入另一个控制器时,它会丢失其属性,当我想要访问我的用户时,我会得到“null”。如何使bean的属性在所有其他控制器中可用?我不想使用静态属性。。。我试图使bean“会话范围”,但它不起作用 苏尔滨:Java 在Spring中存储bean实例,java,spring,tomcat,spring-mvc,spring-webflow,Java,Spring,Tomcat,Spring Mvc,Spring Webflow,我的web应用程序中有一个身份验证方法,它从另一个应用程序获取http参数。我从数据库加载用户并将其存储在Springbean中。在我的登录控制器中,它是实例化的,但当我将它注入另一个控制器时,它会丢失其属性,当我想要访问我的用户时,我会得到“null”。如何使bean的属性在所有其他控制器中可用?我不想使用静态属性。。。我试图使bean“会话范围”,但它不起作用 苏尔滨: @Service @SessionScoped public class SessionUserBean {
@Service
@SessionScoped
public class SessionUserBean {
public Dolgozo user;
public Boolean userIsDolgozo;
public Boolean userIsIranyito;
public Boolean userIsVezeto;
public Boolean userIsOsztalyVezeto;
public void setUser(Dolgozo user) {
this.user = user;
}
public Dolgozo getUser() {
return user;
}
}
我设置用户属性的值:
@Autowired
private SessionUser sessionUser;
@Autowired
private SessionUserBean user;
@Autowired
private HttpServletRequest request;
@RequestMapping("index.htm")
public String doLogin(@RequestParam String token) {
if (login.isUserAuthanticated(token)) {
user.setUser(sessionUser.getDolgozo());
return "sikeresBelepes";
}
return "sikertelenBelepes";
}
这就是我想使用它的地方:
@Autowired
private SessionUserBean user;
public void setUp() {
employees = drp.findByCsoportID(user.getUser().getCsoportid().getId());
}
真是一团糟
为什么不使用?它通过设置一组过滤器自动为您管理。您可以在应用程序的任何位置访问用户信息
如果否,则必须在代码中的某个位置设置用户会话,而不能将其自动关联。像这样:
@RequestMapping("index.htm")
public String doLogin(@RequestParam String token) {
if (login.isUserAuthanticated(token)) {
user.setUser(sessionUser.getDolgozo());
return "sikeresBelepes";
session.addAttribute("securityUser", user);
}
return "sikertelenBelepes";
}
然后使用
getAttribute()
从会话中获取它。我可以在安全上下文中存储用户信息,但是如果我有10个用户,他们同时使用系统,我如何识别每个用户?我的意见是,我可以通过他们自己的会议来识别他们。通过允许一个bean成为会话bean,我成功地做到了这一点。它几乎可以工作,但仍然存在问题。有些情况下,应用程序会把用户搞得一团糟,允许简单用户查看和控制东西,这是管理员应该看到的。如果您有10个用户,那么每个用户将有10个不同的会话。Spring非常适合多用户应用程序。没有任何问题。在您的情况下,您应该检查自己的代码。