4
我正在嘗試開發一個小型的Spring MVC應用程序,我想從每個會話的開始初始化User對象。Spring MVC @Scope代理bean&Jackson 2
我有User類
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyUser implements User {
// private fields
// getters and setters
public void fillByName(String username) {
userDao.select(username);
}
}
,我想初始化MYUSER對象一次春季安全識別用戶,在攔截器類(順便說一句,這是一個好的做法呢?)
public class AppInterceptor extends HandlerInterceptorAdapter {
@Autowired
MyUser user;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
user.fillByName(auth.getName());
}
return true;
}
}
因此,當Controller處理請求時,已經有初始化會話作用域用戶類。但是,當我試圖序列與傑克遜MYUSER對象,它只是doesnt't工作:
@RequestMapping("/")
public String launchApp(ModelMap model) {
ObjectMapper mapper = new ObjectMapper();
try {
System.out.println(user.getUsername()); // Works good!
model.addAttribute("user", mapper.writeValueAsString(user)); // Doesn't work
} catch (JsonProcessingException e) {
// @todo log an error
}
return "app/base";
}
正如你所看到的,MYUSER對象干將工作從Controller類不錯,但傑克遜 - 沒有。
當我從User對象中刪除@Scope註釋時,Jackson序列化開始工作。
顯然,範圍代理豆和單控制器類是問題
但我怎麼能解決這個問題?
-
UPDATE
看起來像我第一誰碰到這個:) 也許這是不好的架構?我應該在控制器中創建一個MyUser類的新實例嗎?常用的做法是什麼?我能想到的