Spring Security版本:spring-boot-starter-security:1.3.0.RC1
注意到注释@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
会导致过时的会话导致页面加载错误。
答案 0 :(得分:16)
注释已移至另一个包中。
使用org.springframework.security.core.annotation.AuthenticationPrincipal
代替弃用的org.springframework.security.web.bind.annotation.AuthenticationPrincipal
。
答案 1 :(得分:-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来避免调用userRepostiory(数据库,重复调用)