From 335c0ae0694190a774270225b751af3a075e5b0b Mon Sep 17 00:00:00 2001 From: jaguarx Date: Mon, 17 Dec 2018 13:33:06 +0800 Subject: [PATCH] ZEPPELIN-3912 add interface UserRoleSearchable and refactor user/role search --- .../zeppelin/realm/UserRoleSearchable.java | 24 +++++++++++++++++++ .../apache/zeppelin/rest/SecurityRestApi.java | 2 +- .../zeppelin/service/NoSecurityService.java | 2 +- .../zeppelin/service/SecurityService.java | 2 +- .../service/ShiroSecurityService.java | 11 ++++++--- 5 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 zeppelin-server/src/main/java/org/apache/zeppelin/realm/UserRoleSearchable.java diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/realm/UserRoleSearchable.java b/zeppelin-server/src/main/java/org/apache/zeppelin/realm/UserRoleSearchable.java new file mode 100644 index 00000000000..3db85c47892 --- /dev/null +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/realm/UserRoleSearchable.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.zeppelin.realm; + +import java.util.List; + +public interface UserRoleSearchable { + List searchForUser(String searchText, int numUsersToFetch); + List searchForRole(String searchText, int numUsersToFetch); +} diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/SecurityRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/SecurityRestApi.java index d6cee2eac71..f56c95465e8 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/SecurityRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/SecurityRestApi.java @@ -101,7 +101,7 @@ public Response getUserList(@PathParam("searchText") final String searchText) { final int numUsersToFetch = 5; List usersList = securityService.getMatchedUsers(searchText, numUsersToFetch); - List rolesList = securityService.getMatchedRoles(); + List rolesList = securityService.getMatchedRoles(searchText, numUsersToFetch); List autoSuggestUserList = new ArrayList<>(); List autoSuggestRoleList = new ArrayList<>(); diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/service/NoSecurityService.java b/zeppelin-server/src/main/java/org/apache/zeppelin/service/NoSecurityService.java index ab8d4c33985..7bf3b5f4139 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/service/NoSecurityService.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/service/NoSecurityService.java @@ -53,7 +53,7 @@ public List getMatchedUsers(String searchText, int numUsersToFetch) { } @Override - public List getMatchedRoles() { + public List getMatchedRoles(String searchText, int numUsersToFetch) { return Lists.newArrayList(); } } diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/service/SecurityService.java b/zeppelin-server/src/main/java/org/apache/zeppelin/service/SecurityService.java index 0f6ab95f4b7..df93af370ec 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/service/SecurityService.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/service/SecurityService.java @@ -33,5 +33,5 @@ public interface SecurityService { List getMatchedUsers(String searchText, int numUsersToFetch); - List getMatchedRoles(); + List getMatchedRoles(String searchText, int numUsersToFetch); } diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/service/ShiroSecurityService.java b/zeppelin-server/src/main/java/org/apache/zeppelin/service/ShiroSecurityService.java index ac8f72174ca..7593957c3d4 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/service/ShiroSecurityService.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/service/ShiroSecurityService.java @@ -53,6 +53,7 @@ import org.apache.zeppelin.conf.ZeppelinConfiguration; import org.apache.zeppelin.realm.ActiveDirectoryGroupRealm; import org.apache.zeppelin.realm.LdapRealm; +import org.apache.zeppelin.realm.UserRoleSearchable; import org.apache.zeppelin.server.ZeppelinServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -154,7 +155,9 @@ public List getMatchedUsers(String searchText, int numUsersToFetch) { for (Realm realm : realmsList) { String name = realm.getClass().getName(); LOGGER.debug("RealmClass.getName: " + name); - if (name.equals("org.apache.shiro.realm.text.IniRealm")) { + if (realm instanceof UserRoleSearchable) { + usersList.addAll(((UserRoleSearchable)realm).searchForUser(searchText, numUsersToFetch)); + } else if (name.equals("org.apache.shiro.realm.text.IniRealm")) { usersList.addAll(getUserList((IniRealm) realm)); } else if (name.equals("org.apache.zeppelin.realm.LdapGroupRealm")) { usersList.addAll(getUserList((JndiLdapRealm) realm, searchText, numUsersToFetch)); @@ -180,7 +183,7 @@ public List getMatchedUsers(String searchText, int numUsersToFetch) { * @return */ @Override - public List getMatchedRoles() { + public List getMatchedRoles(String searchText, int numUsersToFetch) { List rolesList = new ArrayList<>(); try { Collection realmsList = getRealmsList(); @@ -189,7 +192,9 @@ public List getMatchedRoles() { Realm realm = iterator.next(); String name = realm.getClass().getName(); LOGGER.debug("RealmClass.getName: " + name); - if (name.equals("org.apache.shiro.realm.text.IniRealm")) { + if (realm instanceof UserRoleSearchable) { + rolesList.addAll(((UserRoleSearchable)realm).searchForRole(searchText, numUsersToFetch)); + } else if (name.equals("org.apache.shiro.realm.text.IniRealm")) { rolesList.addAll(getRolesList((IniRealm) realm)); } else if (name.equals("org.apache.zeppelin.realm.LdapRealm")) { rolesList.addAll(getRolesList((LdapRealm) realm));