嗨.. stackoverflow 团队成员。
我正在尝试使用 java 中的 HttpSession 来设置一些值,例如 userid,所以我可以使用该变量直到会话保持存在。
我正在使用 spring3.0 进行请求映射。我的登录检查代码如下
@RequestMapping(value = "/login/GetLoginCheck.action")
public @ResponseBody
Map<String, Object> loginCheck(HttpServletRequest request, HttpServletResponse response)
throws Exception {
List<Employee> emplist = null;
try {
GlobalController.session = request.getSession();
if (!GlobalController.session.isNew()) {
this.setUsername(request.getParameter("username"));
this.setPassword(request.getParameter("password"));
emplist = loginservice.getEmployee(this.getUsername(),this.getPassword());
if(emplist.size()>0)
{
for(Employee employee: emplist)
{
this.setEmployeeid(employee.getId());
synchronized (GlobalController.session) {
GlobalController.session.setAttribute("userid", employee.getId());
}
}
}else
{
return getModelMapError("The username or password you entered is incorrect.");
}
}else{
System.out.println("already session created");
System.out.println("SESSION ID ::"+GlobalController.session.getId());
}
} catch (Exception e) {
e.printStackTrace();
}
logingview = this.loginView(this.getUsername(),this.getPassword());
return getMapUser(emplist,logingview);
}
我的 GlobalController 类代码如下
public class GlobalController implements HttpSessionListener{
private static int totalActiveSessions = 0;
public static HttpSession session = null;
@Override
public void sessionCreated(HttpSessionEvent event) {
// TODO Auto-generated method stub
synchronized (this) {
totalActiveSessions++;
}
System.out.println("Session Created: " + event.getSession().getId());
System.out.println("Total Sessions: " + totalActiveSessions);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
// TODO Auto-generated method stub
synchronized (this) {
totalActiveSessions--;
}
System.out.println("Session Destroyed: " + event.getSession().getId());
System.out.println("Total Sessions: " + totalActiveSessions);
}
}
当用户登录时,我的“/login/GetLoginCheck.action”会执行,并且我将属性 empoyeeId: 2 设置为会话。
但是我在局域网中的另一台电脑上打开了相同的 url,并使用另一个名为 empoyeeId: 1 的用户登录。
我遇到的问题是,当我看到日志或打开具有employeeId:1 的网格面板时,它会向我显示属于employeeId:2 的数据。
sessionId 也会被新记录的用户会话覆盖。
请给我一些建议,我可以尝试以适当的方式实施会话,因此我只获得属于预期员工的数据和会话。