我有一个基于 Spring MVC 的 Web 应用程序。目前在我的网页中,我在用户登录后显示用户的名字和姓氏。我这样做的方式是,对于进入 @Controller@RequestMapping 的每个 HttpServletRequest,我获取 Principal 对象并从中获取用户详细信息它,然后用 firstname 和 lastname 属性填充 ModelMap。例如这里是示例代码
@Autowired
private SecurityDetails securityDetails;
@RequestMapping(method = RequestMethod.GET)
public String showWelcomePage(HttpServletRequest request,
HttpServletResponse response, ModelMap model, Principal principal)
{
securityDetails.populateUserName(model, principal);
... lot of code here;
return "home";
}
public boolean populateUserName(ModelMap model, Principal principal) {
if (principal != null) {
Object ob = ((Authentication)principal).getPrincipal();
if(ob instanceof MyUserDetails)
{
MyUserDetails ud = (MyUserDetails)ob;
model.addAttribute("username", ud.getFirstName() + " " + ud.getLastName());
}
return true;
}
else
{
logger.debug("principal is null");
return false;
}
}
我的问题是我必须为每个 RequestMapping 调用 populateUserName 方法。有没有一种优雅的方法,比如在 Interceptor 方法中填充它,这将导致这个方法在整个应用程序的一个地方被调用?