복붙노트

[SPRING] Spring 3.0은 세션 속성을 설정하고 가져온다.

SPRING

Spring 3.0은 세션 속성을 설정하고 가져온다.

세션 범위에서 도메인 개체 (UserVO)를 읽고 싶습니다.

나는 WelcomeController라는 컨트롤러에 UserVO를 설정하고 있습니다.

@Controller
@RequestMapping("/welcome.htm")
public class WelcomeController {
@RequestMapping(method = RequestMethod.POST)
    public String processSubmit(BindingResult result, SessionStatus status,HttpSession session){
      User user = loginService.loginUser(loginCredentials);
     session.setAttribute("user", user);
         return "loginSuccess";
    }
}

jsp 페이지에서 객체를 사용할 수 있습니다.

$ {user.userDetails.firstName}

하지만 다른 컨트롤러에서 값을 읽을 수는 없습니다.

다음과 같이 세션 속성을 읽으려고합니다.

@Controller
public class InspectionTypeController {
@RequestMapping(value="/addInspectionType.htm", method = RequestMethod.POST )
 public String addInspectionType(InspectionType inspectionType, HttpSession session)
 {
           User user = (User) session.getAttribute("user");
           System.out.println("User: "+ user.getUserDetails().getFirstName);

        }
} 

해결법

  1. ==============================

    1.표시 한 코드가 작동해야합니다. HttpSession은 컨트롤러간에 공유되며 동일한 속성 이름을 사용하고 있습니다. 따라서 뭔가 다른 것이 잘못되어 가고 있습니다.

    표시 한 코드가 작동해야합니다. HttpSession은 컨트롤러간에 공유되며 동일한 속성 이름을 사용하고 있습니다. 따라서 뭔가 다른 것이 잘못되어 가고 있습니다.

    그러나 작동하는지 여부에 관계없이 Spring은 @SessionAttribute 주석 (docs 참조)을 사용하여 모델 객체를 세션에 유지하는보다 우아한 접근 방식을 제공합니다.

    예를 들어 (이것을 테스트하지는 않았지만 아이디어를 얻을 수 있습니다.)

    @Controller
    @RequestMapping("/welcome.htm")
    @SessionAttributes({"user"})
    public class WelcomeController {
        @RequestMapping(method = RequestMethod.POST)
        public String processSubmit(ModelMap modelMap){
           User user = loginService.loginUser(loginCredentials);
           modelMap.addtAttribute(user);
           return "loginSuccess";
        }
    }
    

    그리고

    @Controller
    @SessionAttributes({"user"})
    public class InspectionTypeController {
    
       @RequestMapping(value="/addInspectionType.htm", method = RequestMethod.POST )
       public void addInspectionType(InspectionType inspectionType, @ModelAttribute User user) {
          System.out.println("User: "+ user.getUserDetails().getFirstName);
       }
    } 
    

    그러나 원래 코드가 작동하지 않는 경우이 코드는 작동하지 않습니다. 세션에 다른 문제가 있기 때문입니다.

  2. ==============================

    2.@SessionAttributes는 특정 처리기의 컨텍스트에서만 작동하므로 WelcomeController의 특성 집합은이 컨트롤러에서만 볼 수 있습니다.

    @SessionAttributes는 특정 처리기의 컨텍스트에서만 작동하므로 WelcomeController의 특성 집합은이 컨트롤러에서만 볼 수 있습니다.

  3. ==============================

    3.상위 클래스를 사용하여 모든 컨트롤러를 상속하고 거기에 SessionAttributes를 사용하십시오. 이 클래스는 mvc의 패키지 스캔에 있어야합니다.

    상위 클래스를 사용하여 모든 컨트롤러를 상속하고 거기에 SessionAttributes를 사용하십시오. 이 클래스는 mvc의 패키지 스캔에 있어야합니다.

  4. ==============================

    4.UserVO를 Serializable로 설정하지 않았 으면합니다.

    UserVO를 Serializable로 설정하지 않았 으면합니다.

  5. from https://stackoverflow.com/questions/2227395/spring-3-0-set-and-get-session-attribute by cc-by-sa and MIT license