Spring Security - AuthenticatedPricipal已弃用

时间:2015-11-08 22:26:49

标签: spring-mvc spring-security spring-boot

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会导致过时的会话导致页面加载错误。

2 个答案:

答案 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(数据库,重复调用)