【问题标题】:Spring Security - AuthenticatedPricipal deprecatedSpring Security - AuthenticatedPricipal 已弃用
【发布时间】:2016-02-09 13:05:18
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    下面的代码 sn-p 应该可以工作

    @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";
    
    }
    

    您可以通过扩展 User Class 并创建字段 firstName 来避免调用 userRepostiory(database, a duplicate call)

    【讨论】:

      【解决方案2】:

      注释已移至另一个包。

      使用org.springframework.security.core.annotation.AuthenticationPrincipal 代替已弃用的org.springframework.security.web.bind.annotation.AuthenticationPrincipal

      【讨论】:

        猜你喜欢
        • 2016-07-13
        • 2018-09-25
        • 1970-01-01
        • 2020-08-17
        • 2022-06-11
        • 2012-08-31
        • 2013-06-18
        • 2020-01-19
        • 2020-10-16
        相关资源
        最近更新 更多