[SPRING] Spring 3.0은 세션 속성을 설정하고 가져온다.
SPRINGSpring 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} h1>
하지만 다른 컨트롤러에서 값을 읽을 수는 없습니다.
다음과 같이 세션 속성을 읽으려고합니다.
@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.표시 한 코드가 작동해야합니다. 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.@SessionAttributes는 특정 처리기의 컨텍스트에서만 작동하므로 WelcomeController의 특성 집합은이 컨트롤러에서만 볼 수 있습니다.
@SessionAttributes는 특정 처리기의 컨텍스트에서만 작동하므로 WelcomeController의 특성 집합은이 컨트롤러에서만 볼 수 있습니다.
-
==============================
3.상위 클래스를 사용하여 모든 컨트롤러를 상속하고 거기에 SessionAttributes를 사용하십시오. 이 클래스는 mvc의 패키지 스캔에 있어야합니다.
상위 클래스를 사용하여 모든 컨트롤러를 상속하고 거기에 SessionAttributes를 사용하십시오. 이 클래스는 mvc의 패키지 스캔에 있어야합니다.
-
==============================
4.UserVO를 Serializable로 설정하지 않았 으면합니다.
UserVO를 Serializable로 설정하지 않았 으면합니다.
from https://stackoverflow.com/questions/2227395/spring-3-0-set-and-get-session-attribute by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring RestTemplate에서 SSL 인증서 유효성 검사 사용 안 함 (0) | 2019.01.08 |
---|---|
[SPRING] GET 매개 변수에 대한 SpringMVC RequestMapping (0) | 2019.01.08 |
[SPRING] 스프링 보안 3에서 새로운 역할과 권한을 동적으로 생성하기 3 (0) | 2019.01.08 |
[SPRING] 핸들러 예외에 대한 어댑터가 없습니다. (0) | 2019.01.08 |
[SPRING] 스프링 부트로 보조 서블릿을 등록하려면 어떻게해야합니까? (0) | 2019.01.07 |