【问题标题】:How to get userinfo in springboot using keycloak?如何使用keycloak在springboot中获取用户信息?
【发布时间】:2018-08-12 19:16:27
【问题描述】:

我可以通过以下方式获取用户名:

@Autowired
 private HttpServletRequest request;
 Principal user = request.getUserPrincipal();
 mqMessage.setUserName(user.getName());

但我想获取登录用户的名字和姓氏。 我怎样才能得到ff。使用 SpringBoot keycloak 适配器的用户信息?

【问题讨论】:

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


    【解决方案1】:
            KeycloakAuthenticationToken token = (KeycloakAuthenticationToken) request.getUserPrincipal();        
            KeycloakPrincipal principal=(KeycloakPrincipal)token.getPrincipal();
            KeycloakSecurityContext session = principal.getKeycloakSecurityContext();
            AccessToken accessToken = session.getToken();
            username = accessToken.getPreferredUsername();
            emailID = accessToken.getEmail();
            lastname = accessToken.getFamilyName();
            firstname = accessToken.getGivenName();
            realmName = accessToken.getIssuer();            
            Access realmAccess = accessToken.getRealmAccess();
            roles = realmAccess.getRoles();
    

    你可以利用上面的代码sn-p来获取名字和姓氏 这是来自 2.4.0

    【讨论】:

      【解决方案2】:

      使用 Keycloak 11 和 Spring 安全性实现

      更多参考:https://www.keycloak.org/docs/latest/securing_apps/#_spring_security_adapter

      import java.security.Principal;
      /** More imports */
      
      @GetMapping("/userinfo")
      public String userInfoController(Model model, Principal principal) {
      
              KeycloakAuthenticationToken keycloakAuthenticationToken = (KeycloakAuthenticationToken) principal;
              AccessToken accessToken = keycloakAuthenticationToken.getAccount().getKeycloakSecurityContext().getToken();
      
              model.addAttribute("username", accessToken.getGivenName());
              return "page";
      }
      

      【讨论】:

        【解决方案3】:

        我们可以使用 SecurityContextHolder 来获取用户详细信息。

         Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        
            KeycloakPrincipal principal = (KeycloakPrincipal)auth.getPrincipal();
        
        
            KeycloakSecurityContext session = principal.getKeycloakSecurityContext();
            AccessToken accessToken = session.getToken();
            String username = accessToken.getPreferredUsername();
            String emailID = accessToken.getEmail();
            String lastname = accessToken.getFamilyName();
            String firstname = accessToken.getGivenName();
            String realmName = accessToken.getIssuer();
            AccessToken.Access realmAccess = accessToken.getRealmAccess();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-12
          • 2017-09-22
          • 1970-01-01
          • 2021-09-03
          • 2018-07-10
          • 2021-01-27
          • 2020-01-15
          • 2018-04-07
          相关资源
          最近更新 更多