Spring MVC ベースの Web アプリケーションがあります。現在、私のWebページでは、ユーザーがログインした後にユーザーの姓名を表示しています。これを行う方法は、@Controller@RequestMappingに入るすべてのHttpServletRequestに対して、プリンシパルオブジェクトを取得し、ユーザーの詳細を取得することです次に、ModelMap に firstname および lastname 属性を設定します。たとえば、サンプルコードは次のとおりです
@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 メソッドに取り込むなど、アプリケーション全体でこのメソッドが 1 か所で呼び出されるようにするエレガントな方法はありますか?