发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967
课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。
腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518
第二个视频发布 https://edu.csdn.net/course/detail/27109
腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518
介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。
第三个视频发布:https://edu.csdn.net/course/detail/27574
详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------
@Intercepts( { @Signature(type = Executor.class, method = "query", args = {
MappedStatement.class, Object.class, RowBounds.class,
ResultHandler.class }) })
public class DataAuthorityInterceptor implements Interceptor{
@Override
public Object intercept(Invocation invocation) throws Throwable {
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
Object parameter = invocation.getArgs()[1];
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
String originalSql = boundSql.getSql().trim();
Object parameterObject = boundSql.getParameterObject();
String check_user=null;
if(parameterObject instanceof HashMap){
try{
check_user=(String)((HashMap)parameterObject).get("check_user");
}catch(Exception e){}
}
if(check_user!=null){
//获取角色
String getRoleSql="select a.grpcname from TBLGROUPINFO a,tblusergroup b where a.grpid=b.grpid and b.workid=?";
Connection connection=mappedStatement.getConfiguration().getEnvironment().getDataSource().getConnection() ;
PreparedStatement countStmt = connection.prepareStatement(getRoleSql);
countStmt.setString(1, check_user);
ResultSet rs = countStmt.executeQuery();
String role=null;
if (rs.next()) {
role=rs.getString(1);
}
rs.close();
countStmt.close();
connection.close();
if(role!=null){
if(role.equals("新沂管理员")||role.equals("系统管理员")){
//查看全部
}else if(role.equals("风险员")){
if(originalSql.toLowerCase().indexOf("checker_userid")!=-1){
String usersSql="select a.userid from tbldepartment_user a where a.departmentcode=(select b.departmentcode from tbldepartment_user b where b.userid='"+check_user+"')";
String riskSql="select a.* from ("+originalSql+")a where a.checker_userid in ("+usersSql+")";
BoundSql newBoundSql = copyFromBoundSql(mappedStatement,boundSql, riskSql);
ParameterMap map=mappedStatement.getParameterMap();
//ParameterMapping mapping=new ParameterMapping.Builder(mappedStatement.getConfiguration(), check_user, String.class).build();
//map.getParameterMappings().add(mapping);
MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql),map);
invocation.getArgs()[0] = newMs;
}
}else if(role.equals("支行副行长")||role.equals("客户经理")){
if(originalSql.toLowerCase().indexOf("checker_userid")!=-1){
String selfSql="select a.* from ("+originalSql+")a where a.checker_userid='"+check_user+"'";
BoundSql newBoundSql = copyFromBoundSql(mappedStatement,boundSql, selfSql);
ParameterMap map=mappedStatement.getParameterMap();
MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql),map);
invocation.getArgs()[0] = newMs;
}
}else{
throw new RuntimeException("角色错误");
}
}
}
Object obj = invocation.proceed();
return obj;
}
public class BoundSqlSqlSource implements SqlSource {
BoundSql boundSql;
public BoundSqlSqlSource(BoundSql boundSql) {
this.boundSql = boundSql;
}
public BoundSql getBoundSql(Object parameterObject) {
return boundSql;
}
}
/**
* 复制MappedStatement对象
*/
private MappedStatement copyFromMappedStatement(MappedStatement ms,
SqlSource newSqlSource,ParameterMap parameterMap) {
Builder builder = new Builder(ms.getConfiguration(), ms.getId(),
newSqlSource, ms.getSqlCommandType());
builder.resource(ms.getResource());
builder.fetchSize(ms.getFetchSize());
builder.statementType(ms.getStatementType());
builder.keyGenerator(ms.getKeyGenerator());
// builder.keyProperty(ms.getKeyProperty());
builder.timeout(ms.getTimeout());
builder.parameterMap(parameterMap);
builder.resultMaps(ms.getResultMaps());
builder.resultSetType(ms.getResultSetType());
builder.cache(ms.getCache());
builder.flushCacheRequired(ms.isFlushCacheRequired());
builder.useCache(ms.isUseCache());
return builder.build();
}
/**
* 复制BoundSql对象
*/
private BoundSql copyFromBoundSql(MappedStatement ms, BoundSql boundSql,
String sql) {
BoundSql newBoundSql = new BoundSql(ms.getConfiguration(), sql,
boundSql.getParameterMappings(), boundSql.getParameterObject());
for (ParameterMapping mapping : boundSql.getParameterMappings()) {
String prop = mapping.getProperty();
if (boundSql.hasAdditionalParameter(prop)) {
newBoundSql.setAdditionalParameter(prop, boundSql
.getAdditionalParameter(prop));
}
}
return newBoundSql;
}
@Override
public Object plugin(Object arg0) {
return Plugin.wrap(arg0, this);
}
@Override
public void setProperties(Properties arg0) {
}
}
上面是拦截器代码,思路很简单,就是根据业务特性,按不同的角色拼装sql语句。