Я хотел бы переместиться вверх по коду ниже от контроллера до глобального места. Где это имя пользователя и роль могут храниться и совместно использоваться контроллерами, избегая повторного выполнения этого кода в каждом запросе.
@RequestMapping(path = {""})
public String clientHome(Model model, Principal principal){
..........
..........
KeycloakAuthenticationToken token = (KeycloakAuthenticationToken) principal;
KeycloakPrincipal keycloakprincipal=(KeycloakPrincipal)token.getPrincipal();
KeycloakSecurityContext session = keycloakprincipal.getKeycloakSecurityContext();
AccessToken accessToken = session.getToken();
String role = ((KeycloakAuthenticationToken) principal).getAuthorities().toString().replace("ROLE_","");
model.addAttribute("username", accessToken.getGivenName() +" "+accessToken.getFamilyName());
model.addAttribute("role", role);
return "home";
}