Преглед на файлове

fix: fix keycloak init error

while keycloak client init, it can't find class ResteasyJackson2Provider
linwenhua преди 3 години
родител
ревизия
a654e28d63

+ 15 - 24
smsb-customer-manager-app/pom.xml

@@ -42,45 +42,36 @@
         <dependency>
             <groupId>org.keycloak</groupId>
             <artifactId>keycloak-admin-client</artifactId>
-            <version>16.1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.resteasy</groupId>
+                    <artifactId>resteasy-jackson2-provider</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-jackson2-provider</artifactId>
+            <version>3.0.19.Final</version>
         </dependency>
 
         <!--HttpClient -->
         <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
-            <version>3.1</version>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.mybatis</groupId>
-            <artifactId>mybatis-typehandlers-jsr310</artifactId>
-            <version>1.0.1</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.datatype</groupId>
-            <artifactId>jackson-datatype-jsr310</artifactId>
-            <version>2.9.2</version>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
         </dependency>
     </dependencies>
 

+ 5 - 7
smsb-customer-manager-app/src/main/java/com/inspur/customer/config/KeycloakConfiguration.java

@@ -1,8 +1,5 @@
 package com.inspur.customer.config;
 
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
 import org.keycloak.OAuth2Constants;
 import org.keycloak.admin.client.Keycloak;
@@ -24,9 +21,6 @@ public class KeycloakConfiguration {
 
     @Bean
     public Keycloak keycloakClient(){
-        ObjectMapper objectMapper = new ObjectMapper();
-        JacksonJsonProvider jsonProvider = new JacksonJsonProvider(objectMapper , JacksonJsonProvider.BASIC_ANNOTATIONS);
-        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES , false);
         return KeycloakBuilder.builder()
             .serverUrl(authServerUrl)
             .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
@@ -35,8 +29,12 @@ public class KeycloakConfiguration {
             .clientSecret(clientSecret)
             .resteasyClient(
                 new ResteasyClientBuilder()
-                    .register(jsonProvider)
                     .connectionPoolSize(10).build()
             ).build();
     }
+
+    @Bean
+    public RealmResource getRealmResource() {
+        return keycloakClient().realm(realm);
+    }
 }

+ 15 - 21
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/keycloak/KeycloakServiceImpl.java

@@ -5,13 +5,11 @@ import com.inspur.customer.object.keycloak.KeycloakUserCO;
 import com.inspur.customer.object.wechat.Pair;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
-import org.keycloak.admin.client.Keycloak;
 import org.keycloak.admin.client.resource.RealmResource;
 import org.keycloak.admin.client.resource.UserResource;
 import org.keycloak.representations.idm.*;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.Cacheable;
-import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
@@ -25,16 +23,13 @@ import java.util.stream.Collectors;
 public class KeycloakServiceImpl implements KeycloakService {
 
     @Resource
-    private Keycloak keycloak;
-
-    @Value("${keycloak.realm}")
-    private String realm;
+    private RealmResource realmResource;
 
     @Override
     @Cacheable(value = "smsb:users")
     public Map<String, String> getUserMap() {
         Map<String, String> userMap = new HashMap<>();
-        keycloak.realm(realm).users().list().forEach(user ->{
+        realmResource.users().list().forEach(user ->{
             if (user.getFirstName() != null && user.getLastName() != null && !"".equals(user.getLastName())) {
                 user.setUsername(user.getLastName() + user.getFirstName());
             }
@@ -51,7 +46,7 @@ public class KeycloakServiceImpl implements KeycloakService {
     @Override
     public List<KeycloakUserCO> getUsersInRole(String role) {
         List<KeycloakUserCO> keycloakUserCos = new ArrayList<>();
-        keycloak.realm(realm).roles().get(role).getRoleUserMembers().forEach(user -> {
+        realmResource.roles().get(role).getRoleUserMembers().forEach(user -> {
             log.info("name: {}", user.getUsername());
             KeycloakUserCO keycloakUserCo = new KeycloakUserCO();
             keycloakUserCo.setId(user.getId());
@@ -78,7 +73,7 @@ public class KeycloakServiceImpl implements KeycloakService {
     public List<KeycloakUserCO> getUsersByIds(List<String> userIds) {
         List<KeycloakUserCO> keycloakUserCos = new ArrayList<>(userIds.size());
         userIds.forEach(id -> {
-            UserRepresentation userRepresentation = keycloak.realm(realm).users().get(id).toRepresentation();
+            UserRepresentation userRepresentation = realmResource.users().get(id).toRepresentation();
             if (userRepresentation != null) {
                 KeycloakUserCO keycloakUserCo = new KeycloakUserCO();
                 keycloakUserCo.setId(userRepresentation.getId());
@@ -99,7 +94,7 @@ public class KeycloakServiceImpl implements KeycloakService {
     @Override
     public Boolean checkUserRole(String userId, String role) {
         AtomicReference<Boolean> result = new AtomicReference<>(false);
-        List<RoleRepresentation> roles = keycloak.realm(realm).users().get(userId).roles().getAll().getRealmMappings();
+        List<RoleRepresentation> roles = realmResource.users().get(userId).roles().getAll().getRealmMappings();
         log.info("userId:{},roles:{}",userId , roles);
         roles.forEach(n ->{
             if(n.getName().equalsIgnoreCase(role)){
@@ -112,7 +107,7 @@ public class KeycloakServiceImpl implements KeycloakService {
 
     @Override
     public void updateAttribute(String userId ,String property , String value) {
-        UserResource user = keycloak.realm(realm).users().get(userId);
+        UserResource user = realmResource.users().get(userId);
         UserRepresentation userRepresentation = user.toRepresentation();
         if (userRepresentation.getAttributes() == null) {
             userRepresentation.setAttributes(new HashMap<>());
@@ -123,7 +118,7 @@ public class KeycloakServiceImpl implements KeycloakService {
 
     @Override
     public List<String> getAttrByGroupPath(String groupPath, String key) {
-        GroupRepresentation groupRepresentation = keycloak.realm(realm).getGroupByPath(groupPath);
+        GroupRepresentation groupRepresentation = realmResource.getGroupByPath(groupPath);
         if (groupRepresentation != null) {
             Map<String, List<String>> attributes = groupRepresentation.getAttributes();
             return attributes != null ? attributes.get(key) : Collections.emptyList();
@@ -138,7 +133,7 @@ public class KeycloakServiceImpl implements KeycloakService {
 
     @Override
     public List<KeycloakUserCO> getSuperAdmin() {
-        return keycloak.realm(realm).roles().get("ROLE_SUPER_ADMIN").getRoleUserMembers()
+        return realmResource.roles().get("ROLE_SUPER_ADMIN").getRoleUserMembers()
             .stream()
             .map(this::transfer)
             .collect(Collectors.toList());
@@ -165,17 +160,17 @@ public class KeycloakServiceImpl implements KeycloakService {
             .filter(t -> Objects.nonNull(t) && Objects.nonNull(t.getKey()) && Objects.nonNull(t.getValue()))
             .map(t -> t.getKey() + ":" + t.getValue())
             .collect(Collectors.joining(" "));
-        return keycloak.realm(realm).users().searchByAttributes(search).stream().map(this::transfer).collect(Collectors.toList());
+        return realmResource.users().searchByAttributes(search).stream().map(this::transfer).collect(Collectors.toList());
     }
 
     @Override
     public List<String> getUserGroupPathList(String userId) {
-        return keycloak.realm(realm).users().get(userId).groups().stream().map(GroupRepresentation::getPath).collect(Collectors.toList());
+        return realmResource.users().get(userId).groups().stream().map(GroupRepresentation::getPath).collect(Collectors.toList());
     }
 
     @Override
     public List<String> getUserRealmRoles(String userId) {
-        return keycloak.realm(realm)
+        return realmResource
             .users()
             .get(userId)
             .roles()
@@ -189,10 +184,10 @@ public class KeycloakServiceImpl implements KeycloakService {
     @Override
     public Map<String, List<String>> getUserClientRoles(String userId) {
         Map<String, List<String>> resultMap = new HashMap<>();
-        List<ClientRepresentation> clientList = keycloak.realm(realm).clients().findAll();
+        List<ClientRepresentation> clientList = realmResource.clients().findAll();
         for (ClientRepresentation clientRepresentation : clientList) {
             String clientId = clientRepresentation.getClientId();
-            List<RoleRepresentation> roleList = keycloak.realm(realm).users().get(userId).roles().clientLevel(clientRepresentation.getId()).listEffective();
+            List<RoleRepresentation> roleList = realmResource.users().get(userId).roles().clientLevel(clientRepresentation.getId()).listEffective();
             if (!roleList.isEmpty()) {
                 resultMap.put(clientId, roleList.stream().map(RoleRepresentation::getName).collect(Collectors.toList()));
             }
@@ -205,14 +200,13 @@ public class KeycloakServiceImpl implements KeycloakService {
         CredentialRepresentation cr = new CredentialRepresentation();
         cr.setType(CredentialRepresentation.PASSWORD);
         cr.setValue(newPassword);
-        keycloak.realm(realm).users().get(userId).resetPassword(cr);
+        realmResource.users().get(userId).resetPassword(cr);
     }
 
     private List<KeycloakUserCO> getUserByRoleAndGroup(String group, String role) {
         if (!StringUtils.hasText(group) || !StringUtils.hasText(role)) {
             return Collections.emptyList();
         }
-        RealmResource realmResource = keycloak.realm(this.realm);
         List<UserRepresentation> members = realmResource.groups().group(realmResource.getGroupByPath(group).getId()).members();
         Set<String> set = realmResource.roles().get(role).getRoleUserMembers().stream().map(UserRepresentation::getId).collect(Collectors.toSet());
         return members.stream().filter(t -> set.contains(t.getId())).map(this::transfer).collect(Collectors.toList());
@@ -238,7 +232,7 @@ public class KeycloakServiceImpl implements KeycloakService {
     @Cacheable(value = "smsb:userList")
     public Map<String, String> getUsersMap() {
         Map<String, String> userMap = new HashMap<>();
-        keycloak.realm(realm).users().list().forEach(user ->{
+        realmResource.users().list().forEach(user ->{
             if (user.getFirstName() != null && user.getLastName() != null && !"".equals(user.getLastName())) {
                 user.setUsername(user.getLastName() + user.getFirstName());
             }