복붙노트

[SPRING] 스프링 MVC 세션 속성 액세스

SPRING

스프링 MVC 세션 속성 액세스

메서드 서명에 포함시키지 않고 HttpSession에 액세스하는 봄 3.0 아래에 어떤 방법이 있습니까? 내가 정말로하고 싶은 것은 null 일 수있는 HttpSession에서 값을 전달할 수 있어야합니다.

이 같은:

@RequestMapping("/myHomePage")
public ModelAndView show(UserSecurityContext ctx) {}

대신이 :

@RequestMapping("/myHomePage")
public ModelAndView show(HttpSession session) {
      UserSecurityContext ctx = (UserSecurityContext) session.getAttribute("userSecurityCtx");
}

해결법

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

    1.@uthark에 의해 언급 된 @SessionAttribute 주석은이 작업에 적합하지 않습니다 - 나는 그것이 역시 생각했지만 약간의 독서가 그렇지 않은 것을 보여줍니다 :

    @uthark에 의해 언급 된 @SessionAttribute 주석은이 작업에 적합하지 않습니다 - 나는 그것이 역시 생각했지만 약간의 독서가 그렇지 않은 것을 보여줍니다 :

    즉, @SessionAttribute는 요청 MVC 모델 객체를 요청 속성으로 저장하는 대신 세션에 저장하기위한 것입니다. 그것은 임의의 세션 속성과 함께 사용하기위한 것이 아닙니다. 발견 한대로 세션 속성이 항상있는 경우에만 작동합니다.

    나는 다른 대안을 모르고 있는데, 당신이 HttpSession.getAttribute ()에 붙어 있다고 생각한다.

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

    2.RequestContextHolder를 사용할 수 있습니다 :

    RequestContextHolder를 사용할 수 있습니다 :

    class SecurityContextHolder {
        public static UserSecurityContext currentSecurityContext() {
            return (UserSecurityContext) 
                RequestContextHolder.currentRequestAttributes()
                .getAttribute("userSecurityCtx", RequestAttributes.SCOPE_SESSION));
        }
    }
    ...
    @RequestMapping("/myHomePage")           
    public ModelAndView show() {           
        UserSecurityContext ctx = SecurityContextHolder.currentSecurityContext();
    }
    

    보안과 같은 교차 절단 문제의 경우 컨트롤러 서명을 수정할 필요가 없으므로이 방법이 더 좋습니다.

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

    3.그래 넌 할수있어.

    그래 넌 할수있어.

    @SessionAttributes("userSecurityContext")
    public class UserSecurityContext {
    }
    
    @RequestMapping("/myHomePage")
    public String show(@ModelAttribute("userSecurityContext") UserSecurityContext u) {
        // code goes here.
    }
    

    자세한 내용은 다음을 참조하십시오.

  4. from https://stackoverflow.com/questions/2213974/spring-mvc-session-attribute-access by cc-by-sa and MIT license