@InitBinder를 이용한 사용자 로그인 정보 @ModelAttribute 객체에 저장하기
@InitBinder
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor(String.class, "userId", new PropertyEditorSupport() {
@Override
public void setAsText(String text) throws IllegalArgumentException {
super.setValue(text);
}
});
}
userId=1111로의 파라미터 요청 시 setAsText 메소드의 text 매개변수는 1111 값이 맵핑되어져 있다.
binder.registerCustomEditor를 위와 같이 등록하게 되면 파라미터 Class가 String 타입이고, userId 파라미터 명인 경우 propertyEditor 핸들러가 파라미터에 대한 내부 처리를 진행한다.
requireType : 파라미터 Class
field : 파라미터 명
propertyEditor : 파라미터 처리 핸들러
간혹 다음과 같이 Server 객체 내부에 존재하는 userId 필드에 로그인 되어 있는 사용자의 계정 정보를 @InitBinder를 이용하여 셋팅해 주고 싶을 때가 있다.
public String list(@ModelAttribute Server server, Model model) {
...
}
이를 위해서 registerCustomEditor를 이용하여 해결할 수도 있으나 파라미터를 넘겨줘야 registerCustomEditor가 작동하기 때문에 다음과 같이 처리를 했다.
@InitBinder
public void initBinder(WebDataBinder binder) {
Object obj = binder.getTarget();
if (obj instanceof Server) {
Server server = (Server) obj;
server.setUserId(AuthUtil.userId());
}
}
AuthUtil.userId() 메소드는 다음과 같이 되어 있음
public static String userId() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String userId = auth.getName();
return userId;
}
'프로그래밍' 카테고리의 다른 글
SimpleDateFormat 쓰레드 세이프 하지 않음 (0) | 2015.07.02 |
---|---|
mybatis multiple select key (2) | 2015.05.21 |
iframe사이트와 parent사이트간 메세지 전송 방법 (서로 도메인이 다른 경우) (0) | 2015.05.21 |
HTTP request 요청 시 Content-Type의 중요성 (6) | 2015.03.09 |
@Async 사용 시 spring security 세션 정보 추출 주의사항 (0) | 2015.03.04 |
@RequestMapping value에 property values 주입하기 (0) | 2014.12.05 |
Free Java Hotswap DCEVM (3) | 2014.09.01 |
이클립스 에러난 행으로 이동 (단축키) (0) | 2014.08.26 |