add derby database (#6996)
This commit is contained in:
parent
3c0508d2da
commit
fea9d7271b
@ -71,6 +71,11 @@
|
|||||||
<artifactId>tomcat-embed-core</artifactId>
|
<artifactId>tomcat-embed-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.derby</groupId>
|
||||||
|
<artifactId>derby</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.jsonwebtoken</groupId>
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
<artifactId>jjwt-api</artifactId>
|
<artifactId>jjwt-api</artifactId>
|
||||||
@ -80,6 +85,7 @@
|
|||||||
<artifactId>jjwt-impl</artifactId>
|
<artifactId>jjwt-impl</artifactId>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.jsonwebtoken</groupId>
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
<artifactId>jjwt-jackson</artifactId>
|
<artifactId>jjwt-jackson</artifactId>
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.configuration;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.util.AuthPropertyUtil;
|
||||||
|
import org.springframework.context.annotation.Condition;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Judge whether to user EmbeddedStorage by condition.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
public class ConditionOnEmbeddedStorage implements Condition {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||||
|
return AuthPropertyUtil.isEmbeddedStorage();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.configuration;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.util.AuthPropertyUtil;
|
||||||
|
import com.alibaba.nacos.sys.env.EnvUtil;
|
||||||
|
import org.springframework.context.annotation.Condition;
|
||||||
|
import org.springframework.context.annotation.ConditionContext;
|
||||||
|
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Judge whether to user StandaloneEmbedStorage by condition.
|
||||||
|
* When embeddedStorage==false.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
public class ConditionStandaloneEmbedStorage implements Condition {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||||
|
return AuthPropertyUtil.isEmbeddedStorage() && EnvUtil.getStandaloneMode();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.configuration.ConditionOnEmbeddedStorage;
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.model.PermissionInfo;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.DatabaseOperate;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.AuthEmbeddedStoragePersistServiceImpl;
|
||||||
|
import com.alibaba.nacos.common.utils.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* There is no self-augmented primary key.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
@Conditional(value = ConditionOnEmbeddedStorage.class)
|
||||||
|
@Component
|
||||||
|
public class AuthEmbeddedPermissionPersistServiceImpl implements PermissionPersistService {
|
||||||
|
|
||||||
|
public static final PermissionRowMapper PERMISSION_ROW_MAPPER = new PermissionRowMapper();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AuthEmbeddedStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<PermissionInfo> getPermissions(String role, int pageNo, int pageSize) {
|
||||||
|
PaginationHelper<PermissionInfo> helper = persistService.createPaginationHelper();
|
||||||
|
|
||||||
|
String sqlCountRows = "SELECT count(*) FROM permissions WHERE ";
|
||||||
|
|
||||||
|
String sqlFetchRows = "SELECT role,resource,action FROM permissions WHERE ";
|
||||||
|
|
||||||
|
String where = " role= ? ";
|
||||||
|
List<String> params = new ArrayList<>();
|
||||||
|
if (StringUtils.isNotBlank(role)) {
|
||||||
|
params = Collections.singletonList(role);
|
||||||
|
} else {
|
||||||
|
where = " 1=1 ";
|
||||||
|
}
|
||||||
|
|
||||||
|
Page<PermissionInfo> pageInfo = helper
|
||||||
|
.fetchPage(sqlCountRows + where, sqlFetchRows + where, params.toArray(), pageNo,
|
||||||
|
pageSize, PERMISSION_ROW_MAPPER);
|
||||||
|
|
||||||
|
if (pageInfo == null) {
|
||||||
|
pageInfo = new Page<>();
|
||||||
|
pageInfo.setTotalCount(0);
|
||||||
|
pageInfo.setPageItems(new ArrayList<>());
|
||||||
|
}
|
||||||
|
return pageInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class PermissionRowMapper implements RowMapper<PermissionInfo> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PermissionInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||||
|
PermissionInfo info = new PermissionInfo();
|
||||||
|
info.setResource(rs.getString("resource"));
|
||||||
|
info.setAction(rs.getString("action"));
|
||||||
|
info.setRole(rs.getString("role"));
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.configuration.ConditionOnEmbeddedStorage;
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.DatabaseOperate;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.AuthEmbeddedStoragePersistServiceImpl;
|
||||||
|
import com.alibaba.nacos.auth.roles.RoleInfo;
|
||||||
|
import com.alibaba.nacos.common.utils.StringUtils;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* There is no self-augmented primary key.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
@Conditional(value = ConditionOnEmbeddedStorage.class)
|
||||||
|
@Component
|
||||||
|
public class AuthEmbeddedRolePersistServiceImpl implements RolePersistService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AuthEmbeddedStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
|
public static final RoleInfoRowMapper ROLE_INFO_ROW_MAPPER = new RoleInfoRowMapper();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<RoleInfo> getRolesByUserName(String username, int pageNo, int pageSize) {
|
||||||
|
|
||||||
|
PaginationHelper<RoleInfo> helper = persistService.createPaginationHelper();
|
||||||
|
|
||||||
|
String sqlCountRows = "SELECT count(*) FROM roles WHERE ";
|
||||||
|
|
||||||
|
String sqlFetchRows = "SELECT role,username FROM roles WHERE ";
|
||||||
|
|
||||||
|
String where = " username= ? ";
|
||||||
|
List<String> params = new ArrayList<>();
|
||||||
|
if (StringUtils.isNotBlank(username)) {
|
||||||
|
params = Collections.singletonList(username);
|
||||||
|
} else {
|
||||||
|
where = " 1=1 ";
|
||||||
|
}
|
||||||
|
|
||||||
|
return helper.fetchPage(sqlCountRows + where, sqlFetchRows + where, params.toArray(), pageNo,
|
||||||
|
pageSize, ROLE_INFO_ROW_MAPPER);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class RoleInfoRowMapper implements RowMapper<RoleInfo> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RoleInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||||
|
RoleInfo roleInfo = new RoleInfo();
|
||||||
|
roleInfo.setRole(rs.getString("role"));
|
||||||
|
roleInfo.setUsername(rs.getString("username"));
|
||||||
|
return roleInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.configuration.ConditionOnEmbeddedStorage;
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.DatabaseOperate;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.AuthEmbeddedStoragePersistServiceImpl;
|
||||||
|
import com.alibaba.nacos.auth.persist.sql.EmbeddedStorageContextUtils;
|
||||||
|
import com.alibaba.nacos.auth.users.User;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* There is no self-augmented primary key.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
@Conditional(value = ConditionOnEmbeddedStorage.class)
|
||||||
|
@Component
|
||||||
|
public class AuthEmbeddedUserPersistServiceImpl implements UserPersistService {
|
||||||
|
|
||||||
|
public static final RowMapper<User> USER_ROW_MAPPER = new UserRowMapper();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AuthEmbeddedStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User findUserByUsername(String username) {
|
||||||
|
String sql = "SELECT username,password FROM users WHERE username=? ";
|
||||||
|
return databaseOperate.queryOne(sql, new Object[] {username}, USER_ROW_MAPPER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute create user operation.
|
||||||
|
*
|
||||||
|
* @param username username string value.
|
||||||
|
* @param password password string value.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void createUser(String username, String password) {
|
||||||
|
String sql = "INSERT INTO users (username, password, enabled) VALUES (?, ?, ?)";
|
||||||
|
|
||||||
|
try {
|
||||||
|
EmbeddedStorageContextUtils.addSqlContext(sql, username, password, true);
|
||||||
|
databaseOperate.blockUpdate();
|
||||||
|
} finally {
|
||||||
|
EmbeddedStorageContextUtils.cleanAllContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<User> getUsers(int pageNo, int pageSize) {
|
||||||
|
|
||||||
|
PaginationHelper<User> helper = persistService.createPaginationHelper();
|
||||||
|
|
||||||
|
String sqlCountRows = "SELECT count(*) FROM users WHERE ";
|
||||||
|
|
||||||
|
String sqlFetchRows = "SELECT username,password FROM users WHERE ";
|
||||||
|
|
||||||
|
String where = " 1=1 ";
|
||||||
|
Page<User> pageInfo = helper
|
||||||
|
.fetchPage(sqlCountRows + where, sqlFetchRows + where, new ArrayList<String>().toArray(), pageNo,
|
||||||
|
pageSize, USER_ROW_MAPPER);
|
||||||
|
if (pageInfo == null) {
|
||||||
|
pageInfo = new Page<>();
|
||||||
|
pageInfo.setTotalCount(0);
|
||||||
|
pageInfo.setPageItems(new ArrayList<>());
|
||||||
|
}
|
||||||
|
return pageInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class UserRowMapper implements RowMapper<User> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||||
|
User user = new User();
|
||||||
|
user.setUsername(rs.getString("username"));
|
||||||
|
user.setPassword(rs.getString("password"));
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,7 @@ import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
|||||||
import com.alibaba.nacos.auth.model.Page;
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
import com.alibaba.nacos.auth.model.PermissionInfo;
|
import com.alibaba.nacos.auth.model.PermissionInfo;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import com.alibaba.nacos.auth.persist.repository.externel.ExternalStoragePersistServiceImpl;
|
import com.alibaba.nacos.auth.persist.repository.externel.AuthExternalStoragePersistServiceImpl;
|
||||||
import com.alibaba.nacos.auth.util.LogUtil;
|
import com.alibaba.nacos.auth.util.LogUtil;
|
||||||
import com.alibaba.nacos.common.utils.StringUtils;
|
import com.alibaba.nacos.common.utils.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -44,12 +44,12 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Conditional(value = ConditionOnExternalStorage.class)
|
@Conditional(value = ConditionOnExternalStorage.class)
|
||||||
@Component
|
@Component
|
||||||
public class ExternalPermissionPersistServiceImpl implements PermissionPersistService {
|
public class AuthExternalPermissionPersistServiceImpl implements PermissionPersistService {
|
||||||
|
|
||||||
public static final PermissionRowMapper PERMISSION_ROW_MAPPER = new PermissionRowMapper();
|
public static final PermissionRowMapper PERMISSION_ROW_MAPPER = new PermissionRowMapper();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExternalStoragePersistServiceImpl persistService;
|
private AuthExternalStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
private JdbcTemplate jt;
|
private JdbcTemplate jt;
|
||||||
|
|
@ -19,7 +19,7 @@ package com.alibaba.nacos.auth.persist;
|
|||||||
import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
||||||
import com.alibaba.nacos.auth.model.Page;
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import com.alibaba.nacos.auth.persist.repository.externel.ExternalStoragePersistServiceImpl;
|
import com.alibaba.nacos.auth.persist.repository.externel.AuthExternalStoragePersistServiceImpl;
|
||||||
import com.alibaba.nacos.auth.roles.RoleInfo;
|
import com.alibaba.nacos.auth.roles.RoleInfo;
|
||||||
import com.alibaba.nacos.auth.util.LogUtil;
|
import com.alibaba.nacos.auth.util.LogUtil;
|
||||||
import com.alibaba.nacos.common.utils.StringUtils;
|
import com.alibaba.nacos.common.utils.StringUtils;
|
||||||
@ -44,12 +44,12 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Conditional(value = ConditionOnExternalStorage.class)
|
@Conditional(value = ConditionOnExternalStorage.class)
|
||||||
@Component
|
@Component
|
||||||
public class ExternalRolePersistServiceImpl implements RolePersistService {
|
public class AuthExternalRolePersistServiceImpl implements RolePersistService {
|
||||||
|
|
||||||
public static final RoleInfoRowMapper ROLE_INFO_ROW_MAPPER = new RoleInfoRowMapper();
|
public static final RoleInfoRowMapper ROLE_INFO_ROW_MAPPER = new RoleInfoRowMapper();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExternalStoragePersistServiceImpl persistService;
|
private AuthExternalStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
private JdbcTemplate jt;
|
private JdbcTemplate jt;
|
||||||
|
|
@ -19,7 +19,7 @@ package com.alibaba.nacos.auth.persist;
|
|||||||
import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
||||||
import com.alibaba.nacos.auth.model.Page;
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import com.alibaba.nacos.auth.persist.repository.externel.ExternalStoragePersistServiceImpl;
|
import com.alibaba.nacos.auth.persist.repository.externel.AuthExternalStoragePersistServiceImpl;
|
||||||
import com.alibaba.nacos.auth.users.User;
|
import com.alibaba.nacos.auth.users.User;
|
||||||
import com.alibaba.nacos.auth.util.LogUtil;
|
import com.alibaba.nacos.auth.util.LogUtil;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -42,12 +42,12 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
@Conditional(value = ConditionOnExternalStorage.class)
|
@Conditional(value = ConditionOnExternalStorage.class)
|
||||||
@Component
|
@Component
|
||||||
public class ExternalUserPersistServiceImpl implements UserPersistService {
|
public class AuthExternalUserPersistServiceImpl implements UserPersistService {
|
||||||
|
|
||||||
public static final RowMapper<User> USER_ROW_MAPPER = new UserRowMapper();
|
public static final RowMapper<User> USER_ROW_MAPPER = new UserRowMapper();
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExternalStoragePersistServiceImpl persistService;
|
private AuthExternalStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
private JdbcTemplate jt;
|
private JdbcTemplate jt;
|
||||||
|
|
@ -25,15 +25,15 @@ import org.springframework.stereotype.Component;
|
|||||||
* @author Nacos
|
* @author Nacos
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class DynamicDataSource {
|
public class AuthDynamicDataSource {
|
||||||
|
|
||||||
private DataSourceService localDataSourceService = null;
|
private DataSourceService localDataSourceService = null;
|
||||||
|
|
||||||
private DataSourceService basicDataSourceService = null;
|
private DataSourceService basicDataSourceService = null;
|
||||||
|
|
||||||
private static final DynamicDataSource INSTANCE = new DynamicDataSource();
|
private static final AuthDynamicDataSource INSTANCE = new AuthDynamicDataSource();
|
||||||
|
|
||||||
public static DynamicDataSource getInstance() {
|
public static AuthDynamicDataSource getInstance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
@ -103,13 +103,6 @@ public class ExternalDataSourceServiceImpl implements DataSourceService {
|
|||||||
FATAL_LOG.error("[ExternalDataSourceService] dats source reload error", e);
|
FATAL_LOG.error("[ExternalDataSourceService] dats source reload error", e);
|
||||||
throw new RuntimeException(DB_LOAD_ERROR_MSG);
|
throw new RuntimeException(DB_LOAD_ERROR_MSG);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if (this.dataSourceList.size() > DB_MASTER_SELECT_THRESHOLD) {
|
|
||||||
ConfigExecutor.scheduleConfigTask(new SelectMasterTask(), 10, 10, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
ConfigExecutor.scheduleConfigTask(new CheckDbHealthTask(), 10, 10, TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +118,6 @@ public class ExternalDataSourceServiceImpl implements DataSourceService {
|
|||||||
isHealthList.add(Boolean.TRUE);
|
isHealthList.add(Boolean.TRUE);
|
||||||
});
|
});
|
||||||
new SelectMasterTask().run();
|
new SelectMasterTask().run();
|
||||||
//new CheckDbHealthTask().run();
|
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
FATAL_LOG.error(DB_LOAD_ERROR_MSG, e);
|
FATAL_LOG.error(DB_LOAD_ERROR_MSG, e);
|
||||||
throw new IOException(e);
|
throw new IOException(e);
|
||||||
@ -222,39 +214,8 @@ public class ExternalDataSourceServiceImpl implements DataSourceService {
|
|||||||
|
|
||||||
if (!isFound) {
|
if (!isFound) {
|
||||||
FATAL_LOG.error("[master-db] master db not found.");
|
FATAL_LOG.error("[master-db] master db not found.");
|
||||||
//MetricsMonitor.getDbException().increment();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
@SuppressWarnings("PMD.ClassNamingShouldBeCamelRule")
|
|
||||||
class CheckDbHealthTask implements Runnable {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (DEFAULT_LOG.isDebugEnabled()) {
|
|
||||||
DEFAULT_LOG.debug("check db health.");
|
|
||||||
}
|
|
||||||
String sql = "SELECT * FROM config_info_beta WHERE id = 1";
|
|
||||||
|
|
||||||
for (int i = 0; i < testJtList.size(); i++) {
|
|
||||||
JdbcTemplate jdbcTemplate = testJtList.get(i);
|
|
||||||
try {
|
|
||||||
jdbcTemplate.query(sql, CONFIG_INFO4BETA_ROW_MAPPER);
|
|
||||||
isHealthList.set(i, Boolean.TRUE);
|
|
||||||
} catch (DataAccessException e) {
|
|
||||||
if (i == masterIndex) {
|
|
||||||
FATAL_LOG.error("[db-error] master db {} down.",
|
|
||||||
InternetAddressUtil.getIPFromString(dataSourceList.get(i).getJdbcUrl()));
|
|
||||||
} else {
|
|
||||||
FATAL_LOG.error("[db-error] slave db {} down.",
|
|
||||||
InternetAddressUtil.getIPFromString(dataSourceList.get(i).getJdbcUrl()));
|
|
||||||
}
|
|
||||||
isHealthList.set(i, Boolean.FALSE);
|
|
||||||
|
|
||||||
MetricsMonitor.getDbException().increment();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.alibaba.nacos.auth.persist.repository.embedded;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.configuration.ConditionOnEmbeddedStorage;
|
||||||
|
import com.alibaba.nacos.auth.persist.datasource.DataSourceService;
|
||||||
|
import com.alibaba.nacos.auth.persist.datasource.AuthDynamicDataSource;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
@Conditional(value = ConditionOnEmbeddedStorage.class)
|
||||||
|
@Component
|
||||||
|
public class AuthEmbeddedStoragePersistServiceImpl {
|
||||||
|
|
||||||
|
private DataSourceService dataSourceService;
|
||||||
|
|
||||||
|
private final DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
public AuthEmbeddedStoragePersistServiceImpl(DatabaseOperate databaseOperate) {
|
||||||
|
this.databaseOperate = databaseOperate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* init datasource.
|
||||||
|
*/
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
dataSourceService = AuthDynamicDataSource.getInstance().getDataSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
public <E> PaginationHelper<E> createPaginationHelper() {
|
||||||
|
return new EmbeddedPaginationHelperImpl<E>(databaseOperate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For unit testing.
|
||||||
|
*/
|
||||||
|
public JdbcTemplate getJdbcTemplate() {
|
||||||
|
return this.dataSourceService.getJdbcTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseOperate getDatabaseOperate() {
|
||||||
|
return databaseOperate;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist.repository.embedded;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.configuration.ConditionStandaloneEmbedStorage;
|
||||||
|
import com.alibaba.nacos.auth.persist.datasource.DataSourceService;
|
||||||
|
import com.alibaba.nacos.auth.persist.datasource.AuthDynamicDataSource;
|
||||||
|
import com.alibaba.nacos.auth.persist.sql.ModifyRequest;
|
||||||
|
import com.alibaba.nacos.auth.util.LogUtil;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derby operation in stand-alone mode.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
@Conditional(ConditionStandaloneEmbedStorage.class)
|
||||||
|
@Component
|
||||||
|
public class AuthStandaloneDatabaseOperateImpl implements BaseDatabaseOperate {
|
||||||
|
|
||||||
|
private JdbcTemplate jdbcTemplate;
|
||||||
|
|
||||||
|
private TransactionTemplate transactionTemplate;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
protected void init() {
|
||||||
|
DataSourceService dataSourceService = AuthDynamicDataSource.getInstance().getDataSource();
|
||||||
|
jdbcTemplate = dataSourceService.getJdbcTemplate();
|
||||||
|
transactionTemplate = dataSourceService.getTransactionTemplate();
|
||||||
|
LogUtil.DEFAULT_LOG.info("use StandaloneDatabaseOperateImpl");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R> R queryOne(String sql, Class<R> cls) {
|
||||||
|
return queryOne(jdbcTemplate, sql, cls);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R> R queryOne(String sql, Object[] args, Class<R> cls) {
|
||||||
|
return queryOne(jdbcTemplate, sql, args, cls);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R> R queryOne(String sql, Object[] args, RowMapper<R> mapper) {
|
||||||
|
return queryOne(jdbcTemplate, sql, args, mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R> List<R> queryMany(String sql, Object[] args, RowMapper<R> mapper) {
|
||||||
|
return queryMany(jdbcTemplate, sql, args, mapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <R> List<R> queryMany(String sql, Object[] args, Class<R> rClass) {
|
||||||
|
return queryMany(jdbcTemplate, sql, args, rClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Map<String, Object>> queryMany(String sql, Object[] args) {
|
||||||
|
return queryMany(jdbcTemplate, sql, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean update(List<ModifyRequest> modifyRequests, BiConsumer<Boolean, Throwable> consumer) {
|
||||||
|
return update(transactionTemplate, jdbcTemplate, modifyRequests, consumer);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,242 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist.repository.embedded;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.persist.sql.ModifyRequest;
|
||||||
|
import com.alibaba.nacos.auth.util.LogUtil;
|
||||||
|
import com.alibaba.nacos.common.utils.ExceptionUtil;
|
||||||
|
import com.alibaba.nacos.common.utils.LoggerUtils;
|
||||||
|
import org.springframework.dao.DataAccessException;
|
||||||
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
|
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
||||||
|
import org.springframework.jdbc.BadSqlGrammarException;
|
||||||
|
import org.springframework.jdbc.CannotGetJdbcConnectionException;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
import static com.alibaba.nacos.auth.util.LogUtil.FATAL_LOG;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Derby database basic operation.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("PMD.AbstractMethodOrInterfaceMethodMustUseJavadocRule")
|
||||||
|
public interface BaseDatabaseOperate extends DatabaseOperate {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query one result by sql then convert result to target type.
|
||||||
|
*
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param sql sql
|
||||||
|
* @param cls target type
|
||||||
|
* @param <R> target type
|
||||||
|
* @return R
|
||||||
|
*/
|
||||||
|
default <R> R queryOne(JdbcTemplate jdbcTemplate, String sql, Class<R> cls) {
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.queryForObject(sql, cls);
|
||||||
|
} catch (IncorrectResultSizeDataAccessException e) {
|
||||||
|
return null;
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] can't get connection : {}", ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException : {}", ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query one result by sql and args then convert result to target type.
|
||||||
|
*
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param sql sql
|
||||||
|
* @param args args
|
||||||
|
* @param cls target type
|
||||||
|
* @param <R> target type
|
||||||
|
* @return R
|
||||||
|
*/
|
||||||
|
default <R> R queryOne(JdbcTemplate jdbcTemplate, String sql, Object[] args, Class<R> cls) {
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.queryForObject(sql, args, cls);
|
||||||
|
} catch (IncorrectResultSizeDataAccessException e) {
|
||||||
|
return null;
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] {}", e.toString());
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", sql, args,
|
||||||
|
ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query one result by sql and args then convert result to target type through {@link RowMapper}.
|
||||||
|
*
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param sql sql
|
||||||
|
* @param args args
|
||||||
|
* @param mapper {@link RowMapper}
|
||||||
|
* @param <R> target type
|
||||||
|
* @return R
|
||||||
|
*/
|
||||||
|
default <R> R queryOne(JdbcTemplate jdbcTemplate, String sql, Object[] args, RowMapper<R> mapper) {
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.queryForObject(sql, args, mapper);
|
||||||
|
} catch (IncorrectResultSizeDataAccessException e) {
|
||||||
|
return null;
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] {}", e.toString());
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", sql, args,
|
||||||
|
ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query many result by sql and args then convert result to target type through {@link RowMapper}.
|
||||||
|
*
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param sql sql
|
||||||
|
* @param args args
|
||||||
|
* @param mapper {@link RowMapper}
|
||||||
|
* @param <R> target type
|
||||||
|
* @return result list
|
||||||
|
*/
|
||||||
|
default <R> List<R> queryMany(JdbcTemplate jdbcTemplate, String sql, Object[] args, RowMapper<R> mapper) {
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.query(sql, args, mapper);
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] {}", e.toString());
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", sql, args,
|
||||||
|
ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query many result by sql and args then convert result to target type.
|
||||||
|
*
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param sql sql
|
||||||
|
* @param args args
|
||||||
|
* @param rClass target type class
|
||||||
|
* @param <R> target type
|
||||||
|
* @return result list
|
||||||
|
*/
|
||||||
|
default <R> List<R> queryMany(JdbcTemplate jdbcTemplate, String sql, Object[] args, Class<R> rClass) {
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.queryForList(sql, args, rClass);
|
||||||
|
} catch (IncorrectResultSizeDataAccessException e) {
|
||||||
|
return null;
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] {}", e.toString());
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", sql, args,
|
||||||
|
ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query many result by sql and args then convert result to List<Map<String, Object>>.
|
||||||
|
*
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param sql sql
|
||||||
|
* @param args args
|
||||||
|
* @return List<Map<String, Object>>
|
||||||
|
*/
|
||||||
|
default List<Map<String, Object>> queryMany(JdbcTemplate jdbcTemplate, String sql, Object[] args) {
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.queryForList(sql, args);
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] {}", e.toString());
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", sql, args,
|
||||||
|
ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* execute update operation.
|
||||||
|
*
|
||||||
|
* @param transactionTemplate {@link TransactionTemplate}
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param contexts {@link List} ModifyRequest list
|
||||||
|
* @return {@link Boolean}
|
||||||
|
*/
|
||||||
|
default Boolean update(TransactionTemplate transactionTemplate, JdbcTemplate jdbcTemplate,
|
||||||
|
List<ModifyRequest> contexts) {
|
||||||
|
return update(transactionTemplate, jdbcTemplate, contexts, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* execute update operation, to fix #3617.
|
||||||
|
*
|
||||||
|
* @param transactionTemplate {@link TransactionTemplate}
|
||||||
|
* @param jdbcTemplate {@link JdbcTemplate}
|
||||||
|
* @param contexts {@link List} ModifyRequest list
|
||||||
|
* @return {@link Boolean}
|
||||||
|
*/
|
||||||
|
default Boolean update(TransactionTemplate transactionTemplate, JdbcTemplate jdbcTemplate,
|
||||||
|
List<ModifyRequest> contexts, BiConsumer<Boolean, Throwable> consumer) {
|
||||||
|
return transactionTemplate.execute(status -> {
|
||||||
|
String[] errSql = new String[] {null};
|
||||||
|
Object[][] args = new Object[][] {null};
|
||||||
|
try {
|
||||||
|
contexts.forEach(pair -> {
|
||||||
|
errSql[0] = pair.getSql();
|
||||||
|
args[0] = pair.getArgs();
|
||||||
|
LoggerUtils.printIfDebugEnabled(LogUtil.DEFAULT_LOG, "current sql : {}", errSql[0]);
|
||||||
|
LoggerUtils.printIfDebugEnabled(LogUtil.DEFAULT_LOG, "current args : {}", args[0]);
|
||||||
|
jdbcTemplate.update(pair.getSql(), pair.getArgs());
|
||||||
|
});
|
||||||
|
if (consumer != null) {
|
||||||
|
consumer.accept(Boolean.TRUE, null);
|
||||||
|
}
|
||||||
|
return Boolean.TRUE;
|
||||||
|
} catch (BadSqlGrammarException | DataIntegrityViolationException e) {
|
||||||
|
FATAL_LOG.error("[db-error] sql : {}, args : {}, error : {}", errSql[0], args[0], e.toString());
|
||||||
|
if (consumer != null) {
|
||||||
|
consumer.accept(Boolean.FALSE, e);
|
||||||
|
}
|
||||||
|
return Boolean.FALSE;
|
||||||
|
} catch (CannotGetJdbcConnectionException e) {
|
||||||
|
FATAL_LOG.error("[db-error] sql : {}, args : {}, error : {}", errSql[0], args[0], e.toString());
|
||||||
|
throw e;
|
||||||
|
} catch (DataAccessException e) {
|
||||||
|
FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", errSql[0], args[0],
|
||||||
|
ExceptionUtil.getAllExceptionMsg(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist.repository.embedded;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.persist.sql.EmbeddedStorageContextUtils;
|
||||||
|
import com.alibaba.nacos.auth.persist.sql.ModifyRequest;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derby database operation.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
public interface DatabaseOperate {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data query transaction.
|
||||||
|
*
|
||||||
|
* @param sql sqk text
|
||||||
|
* @param cls target type
|
||||||
|
* @param <R> return type
|
||||||
|
* @return query result
|
||||||
|
*/
|
||||||
|
<R> R queryOne(String sql, Class<R> cls);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data query transaction.
|
||||||
|
*
|
||||||
|
* @param sql sqk text
|
||||||
|
* @param args sql parameters
|
||||||
|
* @param cls target type
|
||||||
|
* @param <R> return type
|
||||||
|
* @return query result
|
||||||
|
*/
|
||||||
|
<R> R queryOne(String sql, Object[] args, Class<R> cls);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data query transaction.
|
||||||
|
*
|
||||||
|
* @param sql sqk text
|
||||||
|
* @param args sql parameters
|
||||||
|
* @param mapper Database query result converter
|
||||||
|
* @param <R> return type
|
||||||
|
* @return query result
|
||||||
|
*/
|
||||||
|
<R> R queryOne(String sql, Object[] args, RowMapper<R> mapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data query transaction.
|
||||||
|
*
|
||||||
|
* @param sql sqk text
|
||||||
|
* @param args sql parameters
|
||||||
|
* @param mapper Database query result converter
|
||||||
|
* @param <R> return type
|
||||||
|
* @return query result
|
||||||
|
*/
|
||||||
|
<R> List<R> queryMany(String sql, Object[] args, RowMapper<R> mapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data query transaction.
|
||||||
|
*
|
||||||
|
* @param sql sqk text
|
||||||
|
* @param args sql parameters
|
||||||
|
* @param rClass target type
|
||||||
|
* @param <R> return type
|
||||||
|
* @return query result
|
||||||
|
*/
|
||||||
|
<R> List<R> queryMany(String sql, Object[] args, Class<R> rClass);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data query transaction.
|
||||||
|
*
|
||||||
|
* @param sql sqk text
|
||||||
|
* @param args sql parameters
|
||||||
|
* @return query result
|
||||||
|
*/
|
||||||
|
List<Map<String, Object>> queryMany(String sql, Object[] args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* data modify transaction The SqlContext to be executed in the current thread will be executed and automatically
|
||||||
|
* cleared.
|
||||||
|
*
|
||||||
|
* @return is success
|
||||||
|
*/
|
||||||
|
default Boolean blockUpdate() {
|
||||||
|
return blockUpdate(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* data modify transaction The SqlContext to be executed in the current thread will be executed and automatically
|
||||||
|
* cleared.
|
||||||
|
* @author klw(213539@qq.com)
|
||||||
|
* 2020/8/24 18:16
|
||||||
|
* @param consumer the consumer
|
||||||
|
* @return java.lang.Boolean
|
||||||
|
*/
|
||||||
|
default Boolean blockUpdate(BiConsumer<Boolean, Throwable> consumer) {
|
||||||
|
try {
|
||||||
|
return update(EmbeddedStorageContextUtils.getCurrentSqlContext(), consumer);
|
||||||
|
} finally {
|
||||||
|
EmbeddedStorageContextUtils.cleanAllContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* data modify transaction.
|
||||||
|
*
|
||||||
|
* @param modifyRequests {@link List}
|
||||||
|
* @param consumer {@link BiConsumer}
|
||||||
|
* @return is success
|
||||||
|
*/
|
||||||
|
Boolean update(List<ModifyRequest> modifyRequests, BiConsumer<Boolean, Throwable> consumer);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist.repository.embedded;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pagination Utils For Apache Derby.
|
||||||
|
*
|
||||||
|
* @param <E> Generic class
|
||||||
|
* @author boyan
|
||||||
|
* @date 2010-5-6
|
||||||
|
*/
|
||||||
|
class EmbeddedPaginationHelperImpl<E> implements PaginationHelper {
|
||||||
|
|
||||||
|
private final DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
public EmbeddedPaginationHelperImpl(DatabaseOperate databaseOperate) {
|
||||||
|
this.databaseOperate = databaseOperate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Take paging.
|
||||||
|
*
|
||||||
|
* @param sqlCountRows Query total SQL
|
||||||
|
* @param sqlFetchRows Query data sql
|
||||||
|
* @param args query args
|
||||||
|
* @param pageNo page number
|
||||||
|
* @param pageSize page size
|
||||||
|
* @param rowMapper Entity mapping
|
||||||
|
* @return Paging data
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Page<E> fetchPage(final String sqlCountRows, final String sqlFetchRows, final Object[] args,
|
||||||
|
final int pageNo, final int pageSize, final RowMapper rowMapper) {
|
||||||
|
return fetchPage(sqlCountRows, sqlFetchRows, args, pageNo, pageSize, null, rowMapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<E> fetchPage(final String sqlCountRows, final String sqlFetchRows, final Object[] args,
|
||||||
|
final int pageNo, final int pageSize, final Long lastMaxId, final RowMapper rowMapper) {
|
||||||
|
if (pageNo <= 0 || pageSize <= 0) {
|
||||||
|
throw new IllegalArgumentException("pageNo and pageSize must be greater than zero");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query the total number of current records
|
||||||
|
Integer rowCountInt = databaseOperate.queryOne(sqlCountRows, args, Integer.class);
|
||||||
|
if (rowCountInt == null) {
|
||||||
|
throw new IllegalArgumentException("fetchPageLimit error");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count pages
|
||||||
|
int pageCount = rowCountInt / pageSize;
|
||||||
|
if (rowCountInt > pageSize * pageCount) {
|
||||||
|
pageCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Page object
|
||||||
|
final Page<E> page = new Page<E>();
|
||||||
|
page.setPageNumber(pageNo);
|
||||||
|
page.setPagesAvailable(pageCount);
|
||||||
|
page.setTotalCount(rowCountInt);
|
||||||
|
|
||||||
|
if (pageNo > pageCount) {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int startRow = (pageNo - 1) * pageSize;
|
||||||
|
String selectSql = sqlFetchRows + " OFFSET " + startRow + " ROWS FETCH NEXT " + pageSize + " ROWS ONLY";
|
||||||
|
|
||||||
|
List<E> result = databaseOperate.queryMany(selectSql, args, rowMapper);
|
||||||
|
for (E item : result) {
|
||||||
|
page.getPageItems().add(item);
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<E> fetchPageLimit(final String sqlCountRows, final String sqlFetchRows, final Object[] args,
|
||||||
|
final int pageNo, final int pageSize, final RowMapper rowMapper) {
|
||||||
|
if (pageNo <= 0 || pageSize <= 0) {
|
||||||
|
throw new IllegalArgumentException("pageNo and pageSize must be greater than zero");
|
||||||
|
}
|
||||||
|
// Query the total number of current records
|
||||||
|
Integer rowCountInt = databaseOperate.queryOne(sqlCountRows, Integer.class);
|
||||||
|
if (rowCountInt == null) {
|
||||||
|
throw new IllegalArgumentException("fetchPageLimit error");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count pages
|
||||||
|
int pageCount = rowCountInt / pageSize;
|
||||||
|
if (rowCountInt > pageSize * pageCount) {
|
||||||
|
pageCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Page object
|
||||||
|
final Page<E> page = new Page<E>();
|
||||||
|
page.setPageNumber(pageNo);
|
||||||
|
page.setPagesAvailable(pageCount);
|
||||||
|
page.setTotalCount(rowCountInt);
|
||||||
|
|
||||||
|
if (pageNo > pageCount) {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
String selectSql = sqlFetchRows.replaceAll("(?i)LIMIT \\?,\\?", "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY");
|
||||||
|
List<E> result = databaseOperate.queryMany(selectSql, args, rowMapper);
|
||||||
|
for (E item : result) {
|
||||||
|
page.getPageItems().add(item);
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<E> fetchPageLimit(final String sqlCountRows, final Object[] args1, final String sqlFetchRows,
|
||||||
|
final Object[] args2, final int pageNo, final int pageSize, final RowMapper rowMapper) {
|
||||||
|
if (pageNo <= 0 || pageSize <= 0) {
|
||||||
|
throw new IllegalArgumentException("pageNo and pageSize must be greater than zero");
|
||||||
|
}
|
||||||
|
// Query the total number of current records
|
||||||
|
Integer rowCountInt = databaseOperate.queryOne(sqlCountRows, args1, Integer.class);
|
||||||
|
if (rowCountInt == null) {
|
||||||
|
throw new IllegalArgumentException("fetchPageLimit error");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count pages
|
||||||
|
int pageCount = rowCountInt / pageSize;
|
||||||
|
if (rowCountInt > pageSize * pageCount) {
|
||||||
|
pageCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Page object
|
||||||
|
final Page<E> page = new Page<E>();
|
||||||
|
page.setPageNumber(pageNo);
|
||||||
|
page.setPagesAvailable(pageCount);
|
||||||
|
page.setTotalCount(rowCountInt);
|
||||||
|
|
||||||
|
if (pageNo > pageCount) {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
String selectSql = sqlFetchRows.replaceAll("(?i)LIMIT \\?,\\?", "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY");
|
||||||
|
|
||||||
|
List<E> result = databaseOperate.queryMany(selectSql, args2, rowMapper);
|
||||||
|
for (E item : result) {
|
||||||
|
page.getPageItems().add(item);
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<E> fetchPageLimit(final String sqlFetchRows, final Object[] args, final int pageNo, final int pageSize,
|
||||||
|
final RowMapper rowMapper) {
|
||||||
|
if (pageNo <= 0 || pageSize <= 0) {
|
||||||
|
throw new IllegalArgumentException("pageNo and pageSize must be greater than zero");
|
||||||
|
}
|
||||||
|
// Create Page object
|
||||||
|
final Page<E> page = new Page<E>();
|
||||||
|
|
||||||
|
String selectSql = sqlFetchRows.replaceAll("(?i)LIMIT \\?,\\?", "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY");
|
||||||
|
|
||||||
|
List<E> result = databaseOperate.queryMany(selectSql, args, rowMapper);
|
||||||
|
for (E item : result) {
|
||||||
|
page.getPageItems().add(item);
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
}
|
@ -18,7 +18,7 @@ package com.alibaba.nacos.auth.persist.repository.externel;
|
|||||||
|
|
||||||
import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
import com.alibaba.nacos.auth.configuration.ConditionOnExternalStorage;
|
||||||
import com.alibaba.nacos.auth.persist.datasource.DataSourceService;
|
import com.alibaba.nacos.auth.persist.datasource.DataSourceService;
|
||||||
import com.alibaba.nacos.auth.persist.datasource.DynamicDataSource;
|
import com.alibaba.nacos.auth.persist.datasource.AuthDynamicDataSource;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import org.springframework.context.annotation.Conditional;
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
@ -29,7 +29,7 @@ import javax.annotation.PostConstruct;
|
|||||||
@SuppressWarnings(value = {"PMD.MethodReturnWrapperTypeRule", "checkstyle:linelength"})
|
@SuppressWarnings(value = {"PMD.MethodReturnWrapperTypeRule", "checkstyle:linelength"})
|
||||||
@Conditional(value = ConditionOnExternalStorage.class)
|
@Conditional(value = ConditionOnExternalStorage.class)
|
||||||
@Component
|
@Component
|
||||||
public class ExternalStoragePersistServiceImpl {
|
public class AuthExternalStoragePersistServiceImpl {
|
||||||
|
|
||||||
private DataSourceService dataSourceService;
|
private DataSourceService dataSourceService;
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ public class ExternalStoragePersistServiceImpl {
|
|||||||
*/
|
*/
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
dataSourceService = DynamicDataSource.getInstance().getDataSource();
|
dataSourceService = AuthDynamicDataSource.getInstance().getDataSource();
|
||||||
|
|
||||||
jt = getJdbcTemplate();
|
jt = getJdbcTemplate();
|
||||||
}
|
}
|
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist.sql;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporarily saves all insert, update, and delete statements under a transaction in the order in which they occur.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
public class EmbeddedStorageContextUtils {
|
||||||
|
|
||||||
|
private static final ThreadLocal<ArrayList<ModifyRequest>> SQL_CONTEXT = ThreadLocal.withInitial(ArrayList::new);
|
||||||
|
|
||||||
|
private static final ThreadLocal<Map<String, String>> EXTEND_INFO_CONTEXT = ThreadLocal.withInitial(HashMap::new);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add sql context.
|
||||||
|
*
|
||||||
|
* @param sql sql
|
||||||
|
* @param args argument list
|
||||||
|
*/
|
||||||
|
public static void addSqlContext(String sql, Object... args) {
|
||||||
|
ArrayList<ModifyRequest> requests = SQL_CONTEXT.get();
|
||||||
|
ModifyRequest context = new ModifyRequest();
|
||||||
|
context.setExecuteNo(requests.size());
|
||||||
|
context.setSql(sql);
|
||||||
|
context.setArgs(args);
|
||||||
|
requests.add(context);
|
||||||
|
SQL_CONTEXT.set(requests);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put extend info.
|
||||||
|
*
|
||||||
|
* @param key key
|
||||||
|
* @param value value
|
||||||
|
*/
|
||||||
|
public static void putExtendInfo(String key, String value) {
|
||||||
|
Map<String, String> old = EXTEND_INFO_CONTEXT.get();
|
||||||
|
old.put(key, value);
|
||||||
|
EXTEND_INFO_CONTEXT.set(old);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put all extend info.
|
||||||
|
*
|
||||||
|
* @param map all extend info
|
||||||
|
*/
|
||||||
|
public static void putAllExtendInfo(Map<String, String> map) {
|
||||||
|
Map<String, String> old = EXTEND_INFO_CONTEXT.get();
|
||||||
|
old.putAll(map);
|
||||||
|
EXTEND_INFO_CONTEXT.set(old);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if key is included.
|
||||||
|
*
|
||||||
|
* @param key key
|
||||||
|
* @return {@code true} if contains key
|
||||||
|
*/
|
||||||
|
public static boolean containsExtendInfo(String key) {
|
||||||
|
Map<String, String> extendInfo = EXTEND_INFO_CONTEXT.get();
|
||||||
|
boolean exist = extendInfo.containsKey(key);
|
||||||
|
EXTEND_INFO_CONTEXT.set(extendInfo);
|
||||||
|
return exist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<ModifyRequest> getCurrentSqlContext() {
|
||||||
|
return SQL_CONTEXT.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, String> getCurrentExtendInfo() {
|
||||||
|
return EXTEND_INFO_CONTEXT.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cleanAllContext() {
|
||||||
|
SQL_CONTEXT.remove();
|
||||||
|
EXTEND_INFO_CONTEXT.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist.sql;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a database UPDATE or INSERT or DELETE statement.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:liaochuntao@live.com">liaochuntao</a>
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("PMD.ClassNamingShouldBeCamelRule")
|
||||||
|
public class ModifyRequest implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 4548851816596520564L;
|
||||||
|
|
||||||
|
private int executeNo;
|
||||||
|
|
||||||
|
private String sql;
|
||||||
|
|
||||||
|
private Object[] args;
|
||||||
|
|
||||||
|
public ModifyRequest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModifyRequest(String sql) {
|
||||||
|
this.sql = sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getExecuteNo() {
|
||||||
|
return executeNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExecuteNo(int executeNo) {
|
||||||
|
this.executeNo = executeNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSql() {
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSql(String sql) {
|
||||||
|
this.sql = sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object[] getArgs() {
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArgs(Object[] args) {
|
||||||
|
this.args = args;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "SQL{" + "executeNo=" + executeNo + ", sql='" + sql + '\'' + ", args=" + Arrays.toString(args) + '}';
|
||||||
|
}
|
||||||
|
}
|
2
auth/src/main/resources/META-INF/spring.factories
Normal file
2
auth/src/main/resources/META-INF/spring.factories
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
org.springframework.context.ApplicationContextInitializer=\
|
||||||
|
com.alibaba.nacos.auth.util.AuthPropertyUtil
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2021 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.model.PermissionInfo;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.DatabaseOperate;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.AuthEmbeddedStoragePersistServiceImpl;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class AuthEmbeddedPermissionPersistServiceImplTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PaginationHelper paginationHelper;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private AuthEmbeddedStoragePersistServiceImpl embeddedStoragePersistService;
|
||||||
|
|
||||||
|
private AuthEmbeddedPermissionPersistServiceImpl embeddedPermissionPersistService;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
embeddedPermissionPersistService = new AuthEmbeddedPermissionPersistServiceImpl();
|
||||||
|
Class<AuthEmbeddedPermissionPersistServiceImpl> embeddedPermissionPersistServiceClass = AuthEmbeddedPermissionPersistServiceImpl.class;
|
||||||
|
Field databaseOperateF = embeddedPermissionPersistServiceClass.getDeclaredField("databaseOperate");
|
||||||
|
databaseOperateF.setAccessible(true);
|
||||||
|
databaseOperateF.set(embeddedPermissionPersistService, databaseOperate);
|
||||||
|
|
||||||
|
Field persistService = embeddedPermissionPersistServiceClass.getDeclaredField("persistService");
|
||||||
|
persistService.setAccessible(true);
|
||||||
|
persistService.set(embeddedPermissionPersistService, embeddedStoragePersistService);
|
||||||
|
Mockito.when(embeddedStoragePersistService.createPaginationHelper()).thenReturn(paginationHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetPermissions() {
|
||||||
|
String role = "role";
|
||||||
|
Page<PermissionInfo> permissions = embeddedPermissionPersistService.getPermissions(role, 1, 10);
|
||||||
|
|
||||||
|
Assert.assertNotNull(permissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.DatabaseOperate;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.AuthEmbeddedStoragePersistServiceImpl;
|
||||||
|
import com.alibaba.nacos.auth.roles.RoleInfo;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class AuthEmbeddedRolePersistServiceImplTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private AuthEmbeddedStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PaginationHelper paginationHelper;
|
||||||
|
|
||||||
|
private AuthEmbeddedRolePersistServiceImpl embeddedRolePersistService;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
embeddedRolePersistService = new AuthEmbeddedRolePersistServiceImpl();
|
||||||
|
Class<AuthEmbeddedRolePersistServiceImpl> embeddedRolePersistServiceClass = AuthEmbeddedRolePersistServiceImpl.class;
|
||||||
|
Field databaseOperateFields = embeddedRolePersistServiceClass.getDeclaredField("databaseOperate");
|
||||||
|
databaseOperateFields.setAccessible(true);
|
||||||
|
databaseOperateFields.set(embeddedRolePersistService, databaseOperate);
|
||||||
|
|
||||||
|
Field persistServiceField = embeddedRolePersistServiceClass.getDeclaredField("persistService");
|
||||||
|
persistServiceField.setAccessible(true);
|
||||||
|
persistServiceField.set(embeddedRolePersistService, persistService);
|
||||||
|
|
||||||
|
Mockito.when(persistService.createPaginationHelper()).thenReturn(paginationHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetRolesByUserName() {
|
||||||
|
Page<RoleInfo> page = embeddedRolePersistService.getRolesByUserName("userName", 1, 10);
|
||||||
|
|
||||||
|
Assert.assertNull(page);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.alibaba.nacos.auth.persist;
|
||||||
|
|
||||||
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.DatabaseOperate;
|
||||||
|
import com.alibaba.nacos.auth.persist.repository.embedded.AuthEmbeddedStoragePersistServiceImpl;
|
||||||
|
import com.alibaba.nacos.auth.users.User;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class AuthEmbeddedUserPersistServiceImplTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private DatabaseOperate databaseOperate;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private AuthEmbeddedStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PaginationHelper paginationHelper;
|
||||||
|
|
||||||
|
private AuthEmbeddedUserPersistServiceImpl embeddedUserPersistService;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
embeddedUserPersistService = new AuthEmbeddedUserPersistServiceImpl();
|
||||||
|
Class<AuthEmbeddedUserPersistServiceImpl> embeddedUserPersistServiceClass = AuthEmbeddedUserPersistServiceImpl.class;
|
||||||
|
|
||||||
|
Field databaseOperateField = embeddedUserPersistServiceClass.getDeclaredField("databaseOperate");
|
||||||
|
databaseOperateField.setAccessible(true);
|
||||||
|
databaseOperateField.set(embeddedUserPersistService, databaseOperate);
|
||||||
|
|
||||||
|
Field persistServiceClassDeclaredField = embeddedUserPersistServiceClass.getDeclaredField("persistService");
|
||||||
|
persistServiceClassDeclaredField.setAccessible(true);
|
||||||
|
persistServiceClassDeclaredField.set(embeddedUserPersistService, persistService);
|
||||||
|
|
||||||
|
Mockito.when(persistService.createPaginationHelper()).thenReturn(paginationHelper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateUser() {
|
||||||
|
embeddedUserPersistService.createUser("username", "password");
|
||||||
|
|
||||||
|
Mockito.verify(databaseOperate).blockUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFindUserByUsername() {
|
||||||
|
User user = embeddedUserPersistService.findUserByUsername("username");
|
||||||
|
|
||||||
|
Assert.assertNull(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetUsers() {
|
||||||
|
Page<User> users = embeddedUserPersistService.getUsers(1, 10);
|
||||||
|
|
||||||
|
Assert.assertNotNull(users);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,7 +19,7 @@ package com.alibaba.nacos.auth.persist;
|
|||||||
import com.alibaba.nacos.auth.model.Page;
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
import com.alibaba.nacos.auth.model.PermissionInfo;
|
import com.alibaba.nacos.auth.model.PermissionInfo;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import com.alibaba.nacos.auth.persist.repository.externel.ExternalStoragePersistServiceImpl;
|
import com.alibaba.nacos.auth.persist.repository.externel.AuthExternalStoragePersistServiceImpl;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -32,10 +32,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class ExternalPermissionPersistServiceImplTest {
|
public class AuthExternalPermissionPersistServiceImplTest {
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private ExternalStoragePersistServiceImpl externalStoragePersistService;
|
private AuthExternalStoragePersistServiceImpl externalStoragePersistService;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private JdbcTemplate jdbcTemplate;
|
private JdbcTemplate jdbcTemplate;
|
||||||
@ -43,13 +43,13 @@ public class ExternalPermissionPersistServiceImplTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PaginationHelper paginationHelper;
|
private PaginationHelper paginationHelper;
|
||||||
|
|
||||||
private ExternalPermissionPersistServiceImpl externalPermissionPersistService;
|
private AuthExternalPermissionPersistServiceImpl externalPermissionPersistService;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
externalPermissionPersistService = new ExternalPermissionPersistServiceImpl();
|
externalPermissionPersistService = new AuthExternalPermissionPersistServiceImpl();
|
||||||
|
|
||||||
Class<ExternalPermissionPersistServiceImpl> externalPermissionPersistServiceClass = ExternalPermissionPersistServiceImpl.class;
|
Class<AuthExternalPermissionPersistServiceImpl> externalPermissionPersistServiceClass = AuthExternalPermissionPersistServiceImpl.class;
|
||||||
Field persistServiceClassDeclaredField = externalPermissionPersistServiceClass
|
Field persistServiceClassDeclaredField = externalPermissionPersistServiceClass
|
||||||
.getDeclaredField("persistService");
|
.getDeclaredField("persistService");
|
||||||
persistServiceClassDeclaredField.setAccessible(true);
|
persistServiceClassDeclaredField.setAccessible(true);
|
@ -18,7 +18,7 @@ package com.alibaba.nacos.auth.persist;
|
|||||||
|
|
||||||
import com.alibaba.nacos.auth.model.Page;
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import com.alibaba.nacos.auth.persist.repository.externel.ExternalStoragePersistServiceImpl;
|
import com.alibaba.nacos.auth.persist.repository.externel.AuthExternalStoragePersistServiceImpl;
|
||||||
import com.alibaba.nacos.auth.roles.RoleInfo;
|
import com.alibaba.nacos.auth.roles.RoleInfo;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@ -32,10 +32,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class ExternalRolePersistServiceImplTest {
|
public class AuthExternalRolePersistServiceImplTest {
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private ExternalStoragePersistServiceImpl persistService;
|
private AuthExternalStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private JdbcTemplate jt;
|
private JdbcTemplate jt;
|
||||||
@ -43,12 +43,12 @@ public class ExternalRolePersistServiceImplTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PaginationHelper paginationHelper;
|
private PaginationHelper paginationHelper;
|
||||||
|
|
||||||
private ExternalRolePersistServiceImpl externalRolePersistService;
|
private AuthExternalRolePersistServiceImpl externalRolePersistService;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
externalRolePersistService = new ExternalRolePersistServiceImpl();
|
externalRolePersistService = new AuthExternalRolePersistServiceImpl();
|
||||||
Class<ExternalRolePersistServiceImpl> externalRolePersistServiceClass = ExternalRolePersistServiceImpl.class;
|
Class<AuthExternalRolePersistServiceImpl> externalRolePersistServiceClass = AuthExternalRolePersistServiceImpl.class;
|
||||||
Field persistServiceClassDeclaredField = externalRolePersistServiceClass.getDeclaredField("persistService");
|
Field persistServiceClassDeclaredField = externalRolePersistServiceClass.getDeclaredField("persistService");
|
||||||
persistServiceClassDeclaredField.setAccessible(true);
|
persistServiceClassDeclaredField.setAccessible(true);
|
||||||
persistServiceClassDeclaredField.set(externalRolePersistService, persistService);
|
persistServiceClassDeclaredField.set(externalRolePersistService, persistService);
|
@ -19,7 +19,7 @@ package com.alibaba.nacos.auth.persist;
|
|||||||
import com.alibaba.nacos.auth.model.Page;
|
import com.alibaba.nacos.auth.model.Page;
|
||||||
import com.alibaba.nacos.auth.users.User;
|
import com.alibaba.nacos.auth.users.User;
|
||||||
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
import com.alibaba.nacos.auth.persist.repository.PaginationHelper;
|
||||||
import com.alibaba.nacos.auth.persist.repository.externel.ExternalStoragePersistServiceImpl;
|
import com.alibaba.nacos.auth.persist.repository.externel.AuthExternalStoragePersistServiceImpl;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -32,10 +32,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class ExternalUserPersistServiceImplTest {
|
public class AuthExternalUserPersistServiceImplTest {
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private ExternalStoragePersistServiceImpl persistService;
|
private AuthExternalStoragePersistServiceImpl persistService;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private JdbcTemplate jdbcTemplate;
|
private JdbcTemplate jdbcTemplate;
|
||||||
@ -43,13 +43,13 @@ public class ExternalUserPersistServiceImplTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PaginationHelper paginationHelper;
|
private PaginationHelper paginationHelper;
|
||||||
|
|
||||||
private ExternalUserPersistServiceImpl externalUserPersistService;
|
private AuthExternalUserPersistServiceImpl externalUserPersistService;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
externalUserPersistService = new ExternalUserPersistServiceImpl();
|
externalUserPersistService = new AuthExternalUserPersistServiceImpl();
|
||||||
|
|
||||||
Class<ExternalUserPersistServiceImpl> externalUserPersistServiceClass = ExternalUserPersistServiceImpl.class;
|
Class<AuthExternalUserPersistServiceImpl> externalUserPersistServiceClass = AuthExternalUserPersistServiceImpl.class;
|
||||||
Field persistServiceClassDeclaredField = externalUserPersistServiceClass.getDeclaredField("persistService");
|
Field persistServiceClassDeclaredField = externalUserPersistServiceClass.getDeclaredField("persistService");
|
||||||
persistServiceClassDeclaredField.setAccessible(true);
|
persistServiceClassDeclaredField.setAccessible(true);
|
||||||
persistServiceClassDeclaredField.set(externalUserPersistService, persistService);
|
persistServiceClassDeclaredField.set(externalUserPersistService, persistService);
|
@ -52,7 +52,7 @@ public class DataSourcePoolPropertiesTest {
|
|||||||
public void testBuild() {
|
public void testBuild() {
|
||||||
DataSourcePoolProperties poolProperties = DataSourcePoolProperties.build(environment);
|
DataSourcePoolProperties poolProperties = DataSourcePoolProperties.build(environment);
|
||||||
poolProperties.setJdbcUrl(JDBC_URL);
|
poolProperties.setJdbcUrl(JDBC_URL);
|
||||||
// poolProperties.setDriverClassName(JDBC_DRIVER_CLASS_NAME);
|
poolProperties.setDriverClassName(JDBC_DRIVER_CLASS_NAME);
|
||||||
poolProperties.setUsername(USERNAME);
|
poolProperties.setUsername(USERNAME);
|
||||||
poolProperties.setPassword(PASSWORD);
|
poolProperties.setPassword(PASSWORD);
|
||||||
HikariDataSource actual = poolProperties.getDataSource();
|
HikariDataSource actual = poolProperties.getDataSource();
|
||||||
|
Loading…
Reference in New Issue
Block a user