2015-11-08 110 views
6

Spring Security的版本:spring-boot-starter-security:1.3.0.RC1春季安全 - AuthenticatedPricipal棄用

我注意到註釋@AuthenticationPrincipal已被棄用。

可能採用不同的方式來完成相同的事情,並想知道這是否是在Spring MVC控制器中獲取用戶信息的正確方法。

@RequestMapping(method = RequestMethod.GET) 
public String getIndex(HttpSession session, Device device, Model model, Principal principal) { 

    /** 
    * Spring Security Fetch User 
    */ 
    if (principal != null) { 
     String username = principal.getName(); 
     User currentUser = userRepository.findByEmail(username); 
     model.addAttribute("user", currentUser.getFirstName()); 
    } 

    return "view"; 

} 

在另一方面,我發現不具有HttpSession session會導致導致頁面加載錯誤失效會話。

回答

15

註釋已被移動到另一個包避免調用userRepostiory(數據庫,重複調用)。使用org.springframework.security.core.annotation.AuthenticationPrincipal而不是已棄用的org.springframework.security.web.bind.annotation.AuthenticationPrincipal

-1

下面的代碼片段應該工作

@RequestMapping(method = RequestMethod.GET) 
public String getIndex(HttpSession session, Device device, Model model) { 

    /** 
    * Spring Security Fetch User 
    */ 

    User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    String username = user.getUsername(); 
    User currentUser = userRepository.findByEmail(username); 
    model.addAttribute("user", currentUser.getFirstName()); 

    return "view"; 

} 

您可以通過擴展用戶類別和創造領域的firstName