2017-04-22 98 views
0

我正在創建我的第一個Spring博客,並嘗試在導航欄中設置記錄的用戶全名。不幸的是,sec:authentication =「name」給了我用戶的電子郵件,$ {user.fullname)不會呈現任何東西。我想在文章控制器中加入以下代碼:Spring和Thymeleaf會話屬性

@GetMapping("/") 
public String index(Model model) { 
    List<Article> articles = this.articleRepository.findAll(); 

    Object currentUser = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

    if ("anonymousUser".equals(currentUser.toString())) { 
     model.addAttribute("username","GUEST"); 
    } else { 
     UserDetails user = (UserDetails) currentUser; 
     String name = this.userRepository.findByEmail(user.getUsername()).getFullName(); 
     model.addAttribute("username",name); 
    } 

    model.addAttribute("view", "home/index"); 
    model.addAttribute("articles", articles); 

    return "base-layout"; 
} 

它起作用了。不過,我想在任何地方使用它,現在我只能在「/」中使用它。請諮詢我如何修改代碼,以便能夠在所有模板中使用用戶名。

回答

1

您應該創建一個註釋類爲@ControllerAdvice的類,它指示註釋類幫助您的Controller。然後創建一個方法@ModelAttribute,它將設置所有(或大部分)控制器共享的通用屬性。

例如:

@ControllerAdvice 
public class UserControllerAdvice { 

    @ModelAttribute 
    public void addUserAttribute() { 

    Object currentUser = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

    if ("anonymousUser".equals(currentUser.toString())) { 
     model.addAttribute("username","GUEST"); 
    } else { 
     UserDetails user = (UserDetails) currentUser; 
     String name = this.userRepository.findByEmail(user.getUsername()).getFullName(); 
     model.addAttribute("username",name); 
    } 
} 
+0

感謝您的答案,遺憾的問題,我應該在控制器文件夾中創建@ControllerAdvice爲一個新文件或者我應該在控制器中添加呢? –

+0

我想通了,非常感謝你!問題已解決 –

+0

很高興你知道,我是afk。你能接受答案嗎? –