2011-10-10 2 views
3

나는 세션 속성이 있습니다 : 사용자이고 로그인 한 사용자와 사용자로 로그인하지 않은 사람들이 공개적으로 볼 수있는 URL이 있습니다. 제안을 매우 환영 ... 나는 그것이 작동하지 않을 느낌이있다, 그러나동일한 요청 매핑을 사용하여 스프링 컨트롤러 메소드 오버로드

@Controller("myController") 
@SessionAttributes({"user"}) 
public class MyController { 

@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET) 
public ModelAndView getPage(@PathVariable Integer id) { 
    return modelandview1; 
} 

@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET) 
public ModelAndView getPage(@PathVariable Integer id, @ModelAttribute User user){ 
    return modelandview2; 
} 

:

는 그래서 내가하고 싶은 것은 이것이다.

+0

세션에 사용자를 추가하는 방법은 무엇입니까? – jtoberon

답변

1

@SessionAttributes의 올바른 사례라고 생각하지 않습니다. 이 주석은 일반적으로 숨겨진 양식 필드를 통해 상태의 관련없는 부분을 전달하지 않도록 양식지지 객체의 원래 인스턴스를 유지하는 데 사용됩니다. - 사용자가 요청 매개 변수를 전달하여 해당 필드를 변경할 수 있습니다

@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET) 
public ModelAndView getPage(@PathVariable Integer id, HttpSession session) { 
    User user = (User) session.getAttribute(...); 
    if (user != null) { 
     ... 
    } else { 
     ... 
    } 
} 

는 또한 @ModelAttribute 데이터 바인딩에 대상이 있습니다 :

귀하의 sceanrio 따라서 명시 적으로 HttpSession를 사용하는 것이 좋습니다 것, 완전히 다른 것입니다. 이 경우에는 절대 원하지 않을 것입니다.

+0

감사합니다. "@ModelAttribute는 데이터 바인딩 대상입니다. 사용자가 요청 매개 변수를 전달하여 필드를 변경할 수 있습니다." – NimChimpsky

+0

@NimChimpsky :'@ ModelAttribute' 작동합니다 양식을 제출할 때와 같은 방법으로 따라서, 악의적 인 사용자는 추가적인 HTTP 매개 변수를 지정하여'User' 객체의 필드를 수정할 수 있습니다. – axtavt

2

두 번째 방법 만 필요합니다. 사용자 메모도 가져 오는 방법입니다. User 모델을 채우는 데 사용할 수있는 요청 특성이 없으면 모든 null (또는 모든 기본값) 필드 값을 가진 User 인스턴스를 얻고 메서드의 본문에서는 그에 따라 각 상황을 처리합니다.

+0

감사합니다. (최소 문자) – NimChimpsky

+0

불행히도 오류가 발생했습니다. – NimChimpsky

관련 문제