Java SpringMVC-@Scope(“session”不';I don’我不能像预期的那样工作

Java SpringMVC-@Scope(“session”不';I don’我不能像预期的那样工作,java,session,spring-mvc,Java,Session,Spring Mvc,我正在尝试使用SpringMVC开发简单的flashcards应用程序。 在我尝试用多个用户测试之前,一切都很顺利。 我希望每个用户都登录,并假设@Session(“scope”)将为每个用户重新创建每个bean。在我看来,这似乎不起作用-我登录了3个不同的设备,它都是连接在一起的,当我登录到一台计算机上时,第二台和第三台计算机上也同样登录。当我注销时-所有计算机都已注销 我很困惑-请帮助: @Controller @Scope("session") @SessionAttributes(

我正在尝试使用SpringMVC开发简单的flashcards应用程序。 在我尝试用多个用户测试之前,一切都很顺利。 我希望每个用户都登录,并假设@Session(“scope”)将为每个用户重新创建每个bean。在我看来,这似乎不起作用-我登录了3个不同的设备,它都是连接在一起的,当我登录到一台计算机上时,第二台和第三台计算机上也同样登录。当我注销时-所有计算机都已注销

我很困惑-请帮助:

   @Controller
@Scope("session")
@SessionAttributes({"logged", "LoggedUser"})


@RequestMapping("/")
public class IndexController {


 public   static NewUser loggedUser;

    @Autowired
    private NewUserRepository newUserRepository;

    @Autowired
    private FlashcardRepository flashcardRepository;



(.....)

也许它与这个静态变量有关——我希望它在每个浏览器会话中都是独立的

@Scope
注释用于使整个bean会话对其所有属性都敏感
@SessionAttributes
使您的模型对象会话感知,您需要手动填充和管理它(例如init)

正如@Sotirios Delimanolis所写,您应该了解静态和非静态属性之间的区别

如果我是科伦特,你在找这样的东西:

@Controller
@SessionAttributes({IndexController.LOGGED_USER_MODEL })
@RequestMapping("/")
public class IndexController {

    private static final String LOGGED_USER_MODEL = "loggedUser";
    public NewUser loggedUser;

    @Autowired
    private NewUserRepository newUserRepository;

    @Autowired
    private FlashcardRepository flashcardRepository;

    @ModelAttribute(LOGGED_USER_MODEL)
    public NewUser initLoggedUser() {
        //this is to make sure that our session attribute model is always populated, otherwise Spring throws exception
        return new NewUser();
    }

    @RequestMapping
    public Model someMethod(@ModelAttribute(LOGGED_USER_MODEL) NewUser loggedUser) {
        //do something with logged user, populete with repository for example
    }  
(……)

(……)

也许这有什么问题?我不确定是否每次会话都会重新创建此静态字段


对于所有这些混乱,我很抱歉-我只希望在每个新的浏览器会话中,这个静态字段都是空的。我理解静态在普通java中是如何工作的,但我对它在Spring上下文中如何与bean和多个用户一起工作感到困惑。我在这里的想法正确吗?

好的-我知道哪里不对。。。每次创建新bean(使用会话范围)时,静态字段保持不变。我应该在非静态变量中存储登录数据。。。很抱歉给您带来困惑,谢谢

你知道字段的
static
是什么意思吗?您的
@SessionAttributes
LoggerUser
与类字段
loggedUser
之间没有关系。
 if (loggedUser!=null){
        model.addAttribute("LoggedUser", loggedUser.getName());}

        if (loggedUser==null){
            model.addAttribute("LoggedUser", "not logged");}
        return "index";
    }
      @RequestMapping(value = "/logUser", method = RequestMethod.POST)
    public String logUser(@ModelAttribute NewUser newUser, BindingResult result, ModelMap model) {


        if (!newUserRepository.findByName(newUser.getName()).isEmpty()) {

          loggedUser=newUserRepository.findByName(newUser.getName()).get(0);
            DrillController.queueKeys=null;
DrillController.cards.clear();
DrillController.wrongAnswers=null;
           if (loggedUser.getNumberOfRepsSetting()!=null) {
               DrillController.NumberOfReps = Integer.parseInt(loggedUser.getNumberOfRepsSetting());
           }
        }



    return "redirect:/";
}