提交 d1bb336b 编写于 作者: S smallchill

修改代码格式,使之符合阿里巴巴java规范

上级 aa893eba
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.base;
import org.springblade.core.base.controller.BladeController;
......@@ -7,6 +22,7 @@ import org.springblade.core.constant.ConstCurd;
/**
* 用于拓展controller类
* @author zhuangqian
*/
public class BaseController extends BladeController implements ConstCurd, ConstCache, ConstCacheKey {
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.beetl;
import org.beetl.core.GroupTemplate;
/**
* 模板注册
* @author zhuangqian
*/
public class BeetlRegister {
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.beetl;
/**
* beetl自定义函数注册
* @author zhuangqian
*/
public class BeetlTools {
......
......@@ -31,11 +31,16 @@ import org.springblade.core.toolbox.kit.PropKit;
import java.math.BigDecimal;
/**
* 配置类
* @author zhuangqian
*/
public class WebConfig implements IConfig {
/**
* 全局参数设置
*/
@Override
public void globalConstants(Cst me) {
Prop prop = PropKit.use(Const.PROPERTY_FILE);
......@@ -82,6 +87,7 @@ public class WebConfig implements IConfig {
/**
* 自定义插件注册
*/
@Override
public void registerPlugins(IPluginHolder plugins) {
plugins.register(new GlobalPlugin());
......@@ -91,6 +97,7 @@ public class WebConfig implements IConfig {
/**
* 全局自定义设置
*/
@Override
public void globalSettings() {
}
......@@ -98,6 +105,7 @@ public class WebConfig implements IConfig {
/**
* 工程启动完毕执行逻辑
*/
@Override
public void afterBladeStart() {
}
......@@ -105,6 +113,7 @@ public class WebConfig implements IConfig {
/**
* 工程关闭执行逻辑
*/
@Override
public void afterBladeStop() {
}
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.intercept;
import org.springblade.core.intercept.CURDInterceptor;
/**
* @author zhuangqian
*/
public class DefaultCURDFactory extends CURDInterceptor {
}
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.intercept;
import org.springblade.core.intercept.SelectInterceptor;
import org.springblade.core.meta.IQuery;
/**
* @author zhuangqian
*/
public class DefaultSelectFactory extends SelectInterceptor {
@Override
public IQuery deptIntercept() {
return new SelectDeptIntercept();
}
@Override
public IQuery roleIntercept() {
return new SelectRoleIntercept();
}
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.intercept;
import org.springblade.core.aop.AopContext;
......@@ -5,8 +20,12 @@ import org.springblade.core.constant.ConstShiro;
import org.springblade.core.intercept.QueryInterceptor;
import org.springblade.core.shiro.ShiroKit;
/**
* @author zhuangqian
*/
public class SelectDeptIntercept extends QueryInterceptor {
@Override
public void queryBefore(AopContext ac) {
if (ShiroKit.lacksRole(ConstShiro.ADMINISTRATOR)) {
String depts = ShiroKit.getUser().getSuperDepts() + "," + ShiroKit.getUser().getDeptId() + "," + ShiroKit.getUser().getSubDepts();
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.intercept;
import org.springblade.core.aop.AopContext;
......@@ -5,8 +20,12 @@ import org.springblade.core.constant.ConstShiro;
import org.springblade.core.intercept.QueryInterceptor;
import org.springblade.core.shiro.ShiroKit;
/**
* @author zhuangqian
*/
public class SelectRoleIntercept extends QueryInterceptor {
@Override
public void queryBefore(AopContext ac) {
if (ShiroKit.lacksRole(ConstShiro.ADMINISTRATOR)) {
String roles = ShiroKit.getUser().getRoles() + "," + ShiroKit.getUser().getSubRoles();
......
......@@ -17,12 +17,17 @@ package org.springblade.common.plugins;
import org.springblade.core.plugins.IPlugin;
/**
* @author zhuangqian
*/
public class GlobalPlugin implements IPlugin {
@Override
public void start() {
System.out.println("\n插件启动测试");
}
@Override
public void stop() {
System.out.println("\n插件关闭测试");
}
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.task;
import org.springblade.core.toolbox.kit.DateKit;
/**
* @author zhuangqian
*/
public class GlobalTask implements Runnable {
@Override
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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 org.springblade.common.tool;
import org.springblade.core.constant.ConstCache;
......@@ -15,6 +30,9 @@ import org.springblade.system.model.*;
import java.util.List;
import java.util.Map;
/**
* @author zhuangqian
*/
public class SysCache implements ConstCache, ConstCacheKey {
/**
......@@ -86,8 +104,9 @@ public class SysCache implements ConstCache, ConstCacheKey {
return Blade.create(Role.class).findById(roleId);
}
});
if (null != role)
if (null != role) {
sb.append(role.getName()).append(",");
}
}
return StrKit.removeSuffix(sb.toString(), ",");
}
......@@ -111,8 +130,9 @@ public class SysCache implements ConstCache, ConstCacheKey {
return Blade.create(Role.class).findById(roleId);
}
});
if (null != role)
if (null != role) {
sb.append(role.getTips()).append(",");
}
}
return StrKit.removeSuffix(sb.toString(), ",");
}
......@@ -154,8 +174,9 @@ public class SysCache implements ConstCache, ConstCacheKey {
return Blade.create(Dept.class).findById(deptId);
}
});
if (null != dept)
if (null != dept) {
sb.append(dept.getSimplename()).append(",");
}
}
return StrKit.removeSuffix(sb.toString(), ",");
}
......
......@@ -26,22 +26,58 @@ import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* @author zhuangqian
*/
public class ShiroUser implements Serializable {
private static final long serialVersionUID = 6847303349754497231L;
private Object id;// 主键
private Object deptId;// 部门id
private String deptName;// 部门名称
private String loginName;// 账号
private String name;// 姓名
private List<Integer> roleList;// 角色集
private String roles;// 角色集
private Object superDepts = "0";// 上级部门集合
private Object subDepts = "0";// 子部门集合
private Object subRoles = "0";// 子角色集合
private Object subUsers = "0";// 子账号集合
/**
* 主键
*/
private Object id;
/**
* 部门id
*/
private Object deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 账号
*/
private String loginName;
/**
* 姓名
*/
private String name;
/**
* 角色集
*/
private List<Integer> roleList;
/**
* 角色集
*/
private String roles;
/**
* 上级部门集合
*/
private Object superDepts = "0";
/**
* 子部门集合
*/
private Object subDepts = "0";
/**
* 子角色集合
*/
private Object subRoles = "0";
/**
* 子账号集合
*/
private Object subUsers = "0";
@SuppressWarnings("rawtypes")
public ShiroUser(Object id, Object deptId, String loginName, String name, List<Integer> roleList) {
......@@ -52,60 +88,10 @@ public class ShiroUser implements Serializable {
this.name = name;
this.roleList = roleList;
this.roles = CollectionKit.join(roleList.toArray(), ",");
// 递归查找上级部门id集合
/*String superDeptSql;
String superDepts = null;
if (Func.isOracle()) {
superDeptSql = "select wm_concat(ID) subDepts from (select ID,PID,SIMPLENAME from blade_dept start with ID in (#{join(deptIds)}) connect by prior PID=ID order by ID) a where a.ID not in (#{join(deptIds)})";
superDepts = Db.queryStr(superDeptSql, CMap.init().set("deptIds", Convert.toIntArray(deptId.toString())));
} else if (Func.isMySql()){
String[] arr = deptId.toString().split(",");
StringBuilder sb = new StringBuilder();
for (String deptid : arr) {
superDeptSql = "select queryParent(#{deptid},'blade_dept') as superdepts";
String str = Db.queryStr(superDeptSql, CMap.init().set("deptid", deptid));
sb.append(str).append(",");
}
superDepts = StrKit.removeSuffix(sb.toString(), ",");
} else if (Func.isPostgresql()){
superDeptSql = "select id from (with RECURSIVE cte as (select a.id,a.simplename,a.pid from blade_dept as a where id in (#{join(deptIds)}) union all select k.id,k.simplename,k.pid from blade_dept as k inner join cte as c on c.pid = k.id )select id,pid,simplename from cte) a where id not in (#{join(deptIds)})";
List<Map> list = Db.selectList(superDeptSql, CMap.init().set("deptIds", Convert.toIntArray(deptId.toString())));
StringBuilder sb = new StringBuilder();
for (Map m : list) {
sb.append(m.get("id")).append(",");
}
superDepts = StrKit.removeSuffix(sb.toString(), ",");
}
this.superDepts = superDepts;*/
// 递归查找子部门id集合
/*String subDeptSql;
String subDepts = null;
if (Func.isOracle()) {
subDeptSql = "select wm_concat(ID) subDepts from (select ID,PID,SIMPLENAME from blade_dept start with ID in (#{join(deptIds)}) connect by prior ID=PID order by ID) a where a.ID not in (#{join(deptIds)})";
subDepts = Db.queryStr(subDeptSql, CMap.init().set("deptIds", Convert.toIntArray(deptId.toString())));
} else if (Func.isMySql()){
String[] arr = deptId.toString().split(",");
StringBuilder sb = new StringBuilder();
for (String deptid : arr) {
subDeptSql = "select queryChildren(#{deptid},'blade_dept') as subdepts";
String str = Db.queryStr(subDeptSql, CMap.init().set("deptid", deptid));
sb.append(str).append(",");
}
subDepts = StrKit.removeSuffix(sb.toString(), ",");
} else if (Func.isPostgresql()){
subDeptSql = "select id from (with RECURSIVE cte as (select a.id,a.simplename,a.pid from blade_dept as a where id in (#{join(deptIds)}) union all select k.id,k.simplename,k.pid from blade_dept as k inner join cte as c on c.id = k.pid )select id,pid,simplename from cte) a where id not in (#{join(deptIds)})";
List<Map> list = Db.selectList(subDeptSql, CMap.init().set("deptIds", Convert.toIntArray(deptId.toString())));
StringBuilder sb = new StringBuilder();
for (Map m : list) {
sb.append(m.get("id")).append(",");
}
subDepts = StrKit.removeSuffix(sb.toString(), ",");
}
this.subDepts = subDepts;*/
// 递归查找子角色id集合
/**
* 递归查找子角色id集合
*/
String roleSql;
String subRoles = null;
if (Func.isOracle()) {
......@@ -129,26 +115,7 @@ public class ShiroUser implements Serializable {
subRoles = StrKit.removeSuffix(sb.toString(), ",");
}
this.subRoles = subRoles;
// 查找子角色对应账号id集合
/*List<Map<String, Object>> listUser = CacheKit.get(ConstCache.SYS_CACHE, ConstCacheKey.USER_ALL_LIST, new ILoader() {
@Override
public Object load() {
return Db.selectList("SELECT * FROM blade_user where status = 1 and name is not null");
}
});
String[] subrolestr = Func.toStr(this.subRoles).split(",");
StringBuilder sbUser = new StringBuilder();
for (Map<String, Object> map : listUser) {
for (String str : subrolestr) {
if (Func.toStr(map.get("ROLEID")).indexOf(str) >= 0 && (("," + sbUser.toString() + ",").indexOf("," + Func.toStr(map.get("ID")) + ",") == -1)) {
Func.builder(sbUser, Func.toStr(map.get("ID")) + ",");
}
}
}
this.subUsers = StrKit.removeSuffix(sbUser.toString(), ","); */
}
public Object getId() {
......
......@@ -6,6 +6,7 @@ import java.util.List;
/**
* 节点数据封装
* @author zhuangqian
*/
public class TreeNode {
......@@ -172,8 +173,9 @@ public class TreeNode {
}
public List<TreeNode> findChildNodes(List<TreeNode> list, Object parentId) {
if (list == null && parentId == null)
if (list == null && parentId == null) {
return null;
}
for (Iterator<TreeNode> iterator = list.iterator(); iterator.hasNext();) {
TreeNode node = (TreeNode) iterator.next();
// 根据传入的某个父节点ID,遍历该父节点的所有子节点
......@@ -186,10 +188,11 @@ public class TreeNode {
}
public List<TreeNode> findParentNodes(List<TreeNode> list, Object childId) {
if (list == null && childId == null)
if (list == null && childId == null) {
return null;
}
for (Iterator<TreeNode> iterator = list.iterator(); iterator.hasNext();) {
TreeNode node = (TreeNode) iterator.next();
TreeNode node = iterator.next();
if (childId.toString().equals(node.getId())) {
recursionFnP(list, node);
}
......@@ -200,12 +203,18 @@ public class TreeNode {
private void recursionFn(List<TreeNode> list, TreeNode node) {
List<TreeNode> childList = getChildList(list, node);// 得到子节点列表
if (childList.size() > 0) {// 判断是否有子节点
/**
* 得到子节点列表
*/
List<TreeNode> childList = getChildList(list, node);
/**
* 判断是否有子节点
*/
if (childList.size() > 0) {
linkedList.add(node);
Iterator<TreeNode> it = childList.iterator();
while (it.hasNext()) {
TreeNode n = (TreeNode) it.next();
TreeNode n = it.next();
recursionFn(list, n);
}
} else {
......@@ -214,12 +223,18 @@ public class TreeNode {
}
private void recursionFnP(List<TreeNode> list, TreeNode node) {
List<TreeNode> parentList = getParentList(list, node);// 得到父节点列表
if (parentList.size() > 0) {// 判断是否有父节点
/**
* 得到父节点列表
*/
List<TreeNode> parentList = getParentList(list, node);
/**
* 判断是否有父节点
*/
if (parentList.size() > 0) {
linkedListP.add(node);
Iterator<TreeNode> it = parentList.iterator();
while (it.hasNext()) {
TreeNode n = (TreeNode) it.next();
TreeNode n = it.next();
recursionFnP(list, n);
}
} else {
......@@ -227,25 +242,35 @@ public class TreeNode {
}
}
// 得到子节点列表
/**
* 得到子节点列表
* @param list
* @param node
* @return
*/
private List<TreeNode> getChildList(List<TreeNode> list, TreeNode node) {
List<TreeNode> nodeList = new ArrayList<TreeNode>();
List<TreeNode> nodeList = new ArrayList<>();
Iterator<TreeNode> it = list.iterator();
while (it.hasNext()) {
TreeNode n = (TreeNode) it.next();
TreeNode n = it.next();
if (n.getParentId().equals(node.getId())) {
nodeList.add(n);
}
}
return nodeList;
}
// 得到子节点列表
/**
* 得到子节点列表
* @param list
* @param node
* @return
*/
private List<TreeNode> getParentList(List<TreeNode> list, TreeNode node) {
List<TreeNode> nodeList = new ArrayList<TreeNode>();
List<TreeNode> nodeList = new ArrayList<>();
Iterator<TreeNode> it = list.iterator();
while (it.hasNext()) {
TreeNode n = (TreeNode) it.next();
TreeNode n = it.next();
if (n.getId().equals(node.getParentId())) {
nodeList.add(n);
}
......
......@@ -15,13 +15,14 @@
*/
package org.springblade.core.aop;
import java.util.Map;
import org.springblade.core.base.controller.BladeController;
import org.springframework.web.servlet.ModelAndView;
import java.util.Map;
/**
* 业务拦截器上下文
* @author zhuangqian
*/
public class AopContext {
......
......@@ -30,6 +30,7 @@ import java.lang.reflect.Method;
/**
* before拦截
* @author zhuangqian
*/
@Aspect
@Component
......
......@@ -15,10 +15,12 @@
*/
package org.springblade.core.aop;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
/**
* @author zhuangqian
*/
public class Invocation {
private Class<?> clazz;
private Method method;
......
......@@ -15,12 +15,6 @@
*/
package org.springblade.core.aop;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
......@@ -31,8 +25,14 @@ import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.support.Convert;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* API校验
* @author zhuangqian
*/
@Aspect
@Component
......
package org.springblade.core.aop;
import java.lang.reflect.Method;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
......@@ -13,18 +8,22 @@ import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springblade.common.vo.ShiroUser;
import org.springblade.core.shiro.ShiroKit;
import org.springframework.stereotype.Component;
import org.springblade.core.annotation.DoLog;
import org.springblade.core.shiro.ShiroKit;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.kit.HttpKit;
import org.springblade.core.toolbox.kit.ObjectKit;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.log.BladeLogManager;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Enumeration;
/**
* AOP 日志
* @author zhuangqian
*/
@Aspect
@Component
......
......@@ -15,22 +15,22 @@
*/
package org.springblade.core.aop;
import java.lang.reflect.Method;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springblade.core.annotation.Permission;
import org.springblade.core.exception.NoPermissionException;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.check.PermissionCheckManager;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* AOP 权限自定义检查
* @author zhuangqian
*/
@Aspect
@Component
......@@ -47,9 +47,12 @@ public class PermissionAop {
Method method = ms.getMethod();
Permission permission = method.getAnnotation(Permission.class);
Object[] permissions = permission.value();
if ((permissions.length == 1 && Func.toStr(permissions[0]).equals("ALL"))
|| permissions == null || permissions.length == 0) {
//检查全体角色
boolean flag = (permissions.length == 1 && Func.toStr(permissions[0]).equals("ALL"))
|| permissions == null || permissions.length == 0;
if (flag) {
/**
* 检查全体角色
*/
boolean result = PermissionCheckManager.checkAll();
if (result) {
return point.proceed();
......@@ -57,7 +60,9 @@ public class PermissionAop {
throw new NoPermissionException();
}
} else {
//检查指定角色
/**
* 检查指定角色
*/
boolean result = PermissionCheckManager.check(permissions);
if (result) {
return point.proceed();
......
......@@ -15,31 +15,27 @@
*/
package org.springblade.core.base.controller;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springblade.core.annotation.Json;
import org.springblade.core.constant.Const;
import org.springblade.core.constant.ConstShiro;
import org.springblade.core.exception.NoPermissionException;
import org.springblade.core.exception.NoUserException;
import org.springblade.core.meta.IQuery;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.ajax.AjaxResult;
import org.springblade.core.toolbox.captcha.CaptchaMaker;
import org.springblade.core.toolbox.file.BladeFile;
import org.springblade.core.toolbox.file.BladeFileKit;
import org.springblade.core.toolbox.file.FileMaker;
import org.springblade.core.toolbox.grid.GridManager;
import org.springblade.core.toolbox.kit.LogKit;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.kit.URLKit;
import org.springblade.core.toolbox.qrcode.QRCodeMaker;
import org.springblade.core.toolbox.kit.*;
import org.springblade.core.toolbox.log.BladeLogManager;
import org.springblade.core.toolbox.qrcode.QrCodeMaker;
import org.springblade.core.toolbox.support.BeanInjector;
import org.springblade.core.toolbox.support.Convert;
import org.springblade.core.toolbox.support.WafRequestWrapper;
import org.springframework.web.HttpRequestMethodNotSupportedException;
......@@ -47,19 +43,18 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springblade.core.constant.Const;
import org.springblade.core.exception.NoPermissionException;
import org.springblade.core.exception.NoUserException;
import org.springblade.core.toolbox.ajax.AjaxResult;
import org.springblade.core.toolbox.file.BladeFileKit;
import org.springblade.core.toolbox.kit.CharsetKit;
import org.springblade.core.toolbox.kit.ObjectKit;
import org.springblade.core.toolbox.log.BladeLogManager;
import org.springblade.core.toolbox.support.BeanInjector;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* Blade控制器封装类
* @author zhuangqian
*/
public class BladeController {
......@@ -187,7 +182,7 @@ public class BladeController {
/**
* 页面跳转
* @param 路径
* @param url
*/
public String redirect(String url) {
return StrKit.format("redirect:{}", url);
......@@ -199,8 +194,8 @@ public class BladeController {
* @param obj String,List,Map,Object[],int[],long[]
* @return
*/
public boolean isEmpty(Object o) {
return Func.isEmpty(o);
public boolean isEmpty(Object obj) {
return Func.isEmpty(obj);
}
/**
......@@ -209,8 +204,8 @@ public class BladeController {
* @param obj String,List,Map,Object[],int[],long[]
* @return
*/
public boolean notEmpty(Object o) {
return !isEmpty(o);
public boolean notEmpty(Object obj) {
return !isEmpty(obj);
}
/**
......@@ -698,7 +693,7 @@ public class BladeController {
* @param height 二维码高度
*/
public void makeQRCode(HttpServletResponse response, String content, int width, int height) {
QRCodeMaker.init(response, content, width, height).start();
QrCodeMaker.init(response, content, width, height).start();
}
/**
......@@ -710,7 +705,7 @@ public class BladeController {
* @param errorCorrectionLevel 带有纠错级别参数的构造方法,纠错能力从高到低共有四个级别:'H'、'Q'、'M'、'L'
*/
public void makeQRCode(HttpServletResponse response, String content, int width, int height, ErrorCorrectionLevel errorCorrectionLevel) {
QRCodeMaker.init(response, content, width, height, errorCorrectionLevel).start();
QrCodeMaker.init(response, content, width, height, errorCorrectionLevel).start();
}
/**
......@@ -722,7 +717,7 @@ public class BladeController {
* @param errorCorrectionLevel 带有纠错级别参数的构造方法,纠错能力从高到低共有四个级别:'H'、'Q'、'M'、'L'
*/
public void makeQRCode(HttpServletResponse response, String content, int width, int height, char errorCorrectionLevel) {
QRCodeMaker.init(response, content, width, height, errorCorrectionLevel).start();
QrCodeMaker.init(response, content, width, height, errorCorrectionLevel).start();
}
/**
......@@ -743,12 +738,21 @@ public class BladeController {
Object resultModel = null;
try {
if (ex.getClass() == HttpRequestMethodNotSupportedException.class) {
url = Const.ERROR_500;// 请求方式不允许抛出的异常,后面可自定义页面
/**
* 请求方式不允许抛出的异常,后面可自定义页面
*/
url = Const.ERROR_500;
} else if (ex.getClass() == NoPermissionException.class) {
url = Const.NOPERMISSION_PATH;// 无权限抛出的异常
/**
* 无权限抛出的异常
*/
url = Const.NOPERMISSION_PATH;
msg = ConstShiro.NO_PERMISSION;
} else if (ex.getClass() == NoUserException.class) {
url = Const.LOGIN_REALPATH;// session过期抛出的异常
/**
* session过期抛出的异常
*/
url = Const.LOGIN_REALPATH;
msg = ConstShiro.NO_USER;
}
if (isAjax() || isPost()) {
......
......@@ -15,18 +15,19 @@
*/
package org.springblade.core.base.controller;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import org.springblade.common.base.BaseController;
import org.springblade.core.annotation.Json;
import org.springblade.core.aop.AopContext;
import org.springblade.core.constant.ConstCurd;
import org.springblade.core.meta.IMeta;
import org.springblade.core.meta.MetaIntercept;
import org.springblade.core.plugins.dao.Blade;
import org.springblade.core.plugins.dao.Db;
import org.springblade.core.plugins.dao.Md;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.ajax.AjaxResult;
import org.springblade.core.toolbox.kit.ClassKit;
import org.springblade.core.toolbox.kit.JsonKit;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.system.service.CurdService;
......@@ -35,13 +36,15 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springblade.core.aop.AopContext;
import org.springblade.core.meta.IMeta;
import org.springblade.core.meta.MetaIntercept;
import org.springblade.core.plugins.dao.Blade;
import org.springblade.core.toolbox.ajax.AjaxResult;
import org.springblade.core.toolbox.kit.ClassKit;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
/**
* @author zhuangqian
* @param <M>
*/
public abstract class CurdController<M> extends BaseController {
@Autowired
......@@ -80,6 +83,10 @@ public abstract class CurdController<M> extends BaseController {
this.init();
}
/**
* 获取核心工厂
* @return
*/
protected abstract Class<? extends IMeta> metaFactoryClass();
/**
......@@ -91,7 +98,7 @@ public abstract class CurdController<M> extends BaseController {
if (Func.isEmpty(switchMap)) {
return null;
}
Map<String, Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>(16);
for (String key : switchMap.keySet()) {
map.put((String) switchMap.get(key), key);
}
......@@ -150,7 +157,7 @@ public abstract class CurdController<M> extends BaseController {
M model = Blade.create(modelClass).findById(id);
cmap.parseBean(model);
} else {
Map<String, Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>(16);
map.put("id", id);
Map<String, Object> model = this.find(sourceMap.get(ConstCurd.KEY_VIEW), map);
cmap.parseMap(model);
......@@ -291,7 +298,8 @@ public abstract class CurdController<M> extends BaseController {
}
private Map<String, Object> find(String source, Map<String, Object> map) {
if (source.indexOf("select") == -1) {
String KEY = "select";
if (source.indexOf(KEY) == -1) {
return findOneById(source, map);
} else {
return findOneBySql(source, map);
......@@ -306,7 +314,7 @@ public abstract class CurdController<M> extends BaseController {
@SuppressWarnings("unchecked")
private Map<String, Object> findOneById(String sqlId, Map<String, Object> map) {
Map<String, Object> model = Md.selectOne(sqlId, map, Map.class); //Db.selectOneBySqlId(sqlId, map);
Map<String, Object> model = Md.selectOne(sqlId, map, Map.class);
return Func.caseInsensitiveMap(model);
}
......
......@@ -18,6 +18,9 @@ package org.springblade.core.base.model;
import java.io.Serializable;
/**
*@author zhuangqian
*/
@SuppressWarnings("serial")
public class BaseModel implements Serializable {
......
......@@ -15,18 +15,23 @@
*/
package org.springblade.core.base.service;
import java.util.List;
import org.springblade.core.aop.AopContext;
import org.springblade.core.constant.ConstCurd;
import org.springblade.core.constant.Cst;
import org.springblade.core.meta.ICURD;
import org.springblade.core.meta.ICurd;
import org.springblade.core.plugins.dao.Blade;
import org.springblade.core.toolbox.grid.BladePage;
import org.springblade.core.toolbox.kit.ClassKit;
import java.util.List;
/**
* 业务基类
* @author zhuangqian
* @param <M>
*/
@SuppressWarnings({ "unchecked" })
public class BaseService<M> implements IService<M>, ConstCurd {
public class BaseServiceImpl<M> implements IService<M>, ConstCurd {
private Class<M> modelClass;
private Blade dao;
......@@ -35,13 +40,13 @@ public class BaseService<M> implements IService<M>, ConstCurd {
this.modelClass = modelClass;
}
public BaseService() {
public BaseServiceImpl() {
this.setModelClass(ClassKit.getSuperClassGenricFirstType(this.getClass()));
}
private Blade getSqlMananger() {
if(null == dao){
synchronized (BaseService.class) {
synchronized (BaseServiceImpl.class) {
if(null == dao){
dao = Blade.create(modelClass);
}
......@@ -50,227 +55,273 @@ public class BaseService<M> implements IService<M>, ConstCurd {
return dao;
}
@Override
public M findById(Object id) {
Blade dao = getSqlMananger();
return dao.findById(id);
}
@Override
public List<M> find(String sqlTemplate, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.find(sqlTemplate, modelOrMap);
}
@Override
public List<M> findTop(int topNum, M model) {
Blade dao = getSqlMananger();
return dao.findTop(topNum, model);
}
@Override
public List<M> findTop(int topNum, String sqlTemplate) {
Blade dao = getSqlMananger();
return dao.findTop(topNum, sqlTemplate);
}
@Override
public List<M> findTop(int topNum, String sqlTemplate, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.findTop(topNum, sqlTemplate, modelOrMap);
}
@Override
public List<M> findAll() {
Blade dao = getSqlMananger();
return dao.findAll();
}
@Override
public List<M> findBy(String where, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.findBy(where, modelOrMap);
}
@Override
public List<M> findBy(String columns, String where, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.findBy(columns, where, modelOrMap);
}
@Override
public List<M> findByTemplate(M model) {
Blade dao = getSqlMananger();
return dao.findByTemplate(model);
}
@Override
public M findFirst(String sqlTemplate, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.findFirst(sqlTemplate, modelOrMap);
}
@Override
public M findFirstBy(String where, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.findFirstBy(where, modelOrMap);
}
@Override
public boolean save(M model) {
Blade dao = getSqlMananger();
return dao.save(model);
}
@Override
public int saveRtId(M model) {
Blade dao = getSqlMananger();
return dao.saveRtId(model);
}
@Override
public String saveRtStrId(M model) {
Blade dao = getSqlMananger();
return dao.saveRtStrId(model);
}
@Override
public boolean saveAndSetKey(M model){
Blade dao = getSqlMananger();
return dao.saveAndSetKey(model);
}
@Override
public void saveBatch(List<?> list) {
Blade dao = getSqlMananger();
dao.saveBatch(list);
}
@Override
public boolean update(M model) {
Blade dao = getSqlMananger();
return dao.update(model);
}
@Override
public boolean updateEveryCol(M model) {
Blade dao = getSqlMananger();
return dao.updateEveryCol(model);
}
@Override
public int updateAllRecords(M model) {
Blade dao = getSqlMananger();
return dao.updateAllRecords(model);
}
@Override
public boolean updateBy(String set, String where, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.updateBy(set, where, modelOrMap);
}
@Override
public int[] updateBathById(List<M> list) {
Blade dao = getSqlMananger();
return dao.updateBathById(list);
}
@Override
public int delete(Object id) {
Blade dao = getSqlMananger();
return dao.delete(id);
}
@Override
public int deleteByIds(String ids) {
Blade dao = getSqlMananger();
return dao.deleteByIds(ids);
}
@Override
public int deleteByCols(String col, String ids) {
Blade dao = getSqlMananger();
return dao.deleteByCols(col, ids);
}
@Override
public int deleteTableByCols(String table, String col, String ids) {
Blade dao = getSqlMananger();
return dao.deleteTableByCols(table, col, ids);
}
@Override
public int deleteByStrIds(String ids) {
Blade dao = getSqlMananger();
return dao.deleteByStrIds(ids);
}
@Override
public int deleteByStrCols(String col, String ids) {
Blade dao = getSqlMananger();
return dao.deleteByStrCols(col, ids);
}
@Override
public int deleteTableByStrCols(String table, String col, String ids) {
Blade dao = getSqlMananger();
return dao.deleteTableByStrCols(table, col, ids);
}
@Override
public int deleteBy(String sqlTemplate) {
Blade dao = getSqlMananger();
return dao.deleteBy(sqlTemplate);
}
@Override
public int deleteBy(String where, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.deleteBy(where, modelOrMap);
}
@Override
public long total() {
Blade dao = getSqlMananger();
return dao.total();
}
@Override
public long count(M model) {
Blade dao = getSqlMananger();
return dao.count(model);
}
@Override
public int count(String where, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.count(where, modelOrMap);
}
@Override
public int countBy(String sqlTemplate, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.countBy(sqlTemplate, modelOrMap);
}
@Override
public List<M> getList(int start, int size) {
Blade dao = getSqlMananger();
return dao.getList(start, size);
}
@Override
public List<M> getList(M model, int start, int size) {
Blade dao = getSqlMananger();
return dao.getList(model, start, size);
}
@Override
public List<M> getList(String sqlTemplate, Object modelOrMap, int start, int size) {
Blade dao = getSqlMananger();
return dao.getList(sqlTemplate, modelOrMap, start, size);
}
@Override
public BladePage<M> paginate(String sqlTemplate, Object paras, int start, int size) {
Blade dao = getSqlMananger();
return dao.paginate(sqlTemplate, paras, start, size);
}
@Override
public boolean isExist(String sqlTemplate, Object modelOrMap) {
Blade dao = getSqlMananger();
return dao.isExist(sqlTemplate, modelOrMap);
}
@Override
public Object getIdValue(Object model) {
Blade dao = getSqlMananger();
return dao.getIdValue(model);
}
@Override
public boolean save(M model, AopContext ac) {
return save(model, ac, Cst.me().getDefaultCURDFactory());
}
@Override
public boolean update(M model, AopContext ac) {
return update(model, ac, Cst.me().getDefaultCURDFactory());
}
@Override
public boolean removeByIds(String ids, AopContext ac) {
return removeByIds(ids, ac, Cst.me().getDefaultCURDFactory());
}
@Override
public boolean delByIds(String ids, AopContext ac) {
return delByIds(ids, ac, Cst.me().getDefaultCURDFactory());
}
@Override
public boolean restoreByIds(String ids, AopContext ac) {
return restoreByIds(ids, ac, Cst.me().getDefaultCURDFactory());
}
public boolean save(M model, AopContext ac, ICURD intercept) {
@Override
public boolean save(M model, AopContext ac, ICurd intercept) {
if (null != intercept) {
ac.setObject(model);
intercept.saveBefore(ac);
......@@ -284,7 +335,8 @@ public class BaseService<M> implements IService<M>, ConstCurd {
return (rtid.length() > 0 && tempAfter);
}
public boolean update(M model, AopContext ac, ICURD intercept) {
@Override
public boolean update(M model, AopContext ac, ICurd intercept) {
if (null != intercept) {
ac.setObject(model);
intercept.updateBefore(ac);
......@@ -297,7 +349,8 @@ public class BaseService<M> implements IService<M>, ConstCurd {
return (temp && tempAfter);
}
public boolean removeByIds(String ids, AopContext ac, ICURD intercept) {
@Override
public boolean removeByIds(String ids, AopContext ac, ICurd intercept) {
if (null != intercept) {
ac.setId(ids);
intercept.removeBefore(ac);
......@@ -310,7 +363,8 @@ public class BaseService<M> implements IService<M>, ConstCurd {
return (n > 0 && tempAfter);
}
public boolean delByIds(String ids, AopContext ac, ICURD intercept) {
@Override
public boolean delByIds(String ids, AopContext ac, ICurd intercept) {
if (null != intercept) {
ac.setId(ids);
intercept.delBefore(ac);
......@@ -323,7 +377,8 @@ public class BaseService<M> implements IService<M>, ConstCurd {
return (temp && tempAfter);
}
public boolean restoreByIds(String ids, AopContext ac, ICURD intercept) {
@Override
public boolean restoreByIds(String ids, AopContext ac, ICurd intercept) {
if (null != intercept) {
ac.setId(ids);
intercept.restoreBefore(ac);
......
......@@ -15,12 +15,17 @@
*/
package org.springblade.core.base.service;
import java.util.List;
import org.springblade.core.aop.AopContext;
import org.springblade.core.meta.ICURD;
import org.springblade.core.meta.ICurd;
import org.springblade.core.toolbox.grid.BladePage;
import java.util.List;
/**
* 基础业务接口
* @author zhuangqian
* @param <M>
*/
public interface IService<M> {
/**
......@@ -28,7 +33,7 @@ public interface IService<M> {
* @param id 主键
* @return M 实体类
*/
public M findById(Object id);
M findById(Object id);
/**
* 根据自定义sql找到实体类集合
......@@ -36,7 +41,7 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return List<M> 实体类集合
*/
public List<M> find(String sql, Object modelOrMap);
List<M> find(String sql, Object modelOrMap);
/**
* 根据实体类查询符合要求的前N条数据
......@@ -44,7 +49,7 @@ public interface IService<M> {
* @param model 实体类
* @return List<M> 实体类集合
*/
public List<M> findTop(int topNum, M model);
List<M> findTop(int topNum, M model);
/**
* 根据sql查询符合要求的前N条数据
......@@ -52,7 +57,7 @@ public interface IService<M> {
* @param sqlTemplate sql语句
* @return
*/
public List<M> findTop(int topNum, String sqlTemplate);
List<M> findTop(int topNum, String sqlTemplate);
/**
* 根据sql查询符合要求的前N条数据
......@@ -61,13 +66,13 @@ public interface IService<M> {
* @param modelOrMap 实体类或map
* @return
*/
public List<M> findTop(int topNum, String sqlTemplate, Object modelOrMap);
List<M> findTop(int topNum, String sqlTemplate, Object modelOrMap);
/**
* 找到所有的实体类集合
* @return List<M> 实体类集合
*/
public List<M> findAll();
List<M> findAll();
/**
* 根据条件查询相匹配的数据
......@@ -75,7 +80,7 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return List<M> 实体类集合
*/
public List<M> findBy(String where, Object modelOrMap);
List<M> findBy(String where, Object modelOrMap);
/**
* 根据条件查询相匹配的数据
......@@ -84,14 +89,14 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return List<M> 实体类集合
*/
public List<M> findBy(String columns, String where, Object modelOrMap);
List<M> findBy(String columns, String where, Object modelOrMap);
/**
* 根据实体类找到数据库相匹配数据
* @param model 实体类
* @return List<M> 实体集合
*/
public List<M> findByTemplate(M model);
List<M> findByTemplate(M model);
/**
* 根据自定义sql语句查询数据
......@@ -99,7 +104,7 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return M 实体类
*/
public M findFirst(String sql, Object modelOrMap);
M findFirst(String sql, Object modelOrMap);
/**
* 根据where条件查询第一条数据
......@@ -107,61 +112,61 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return M 实体类
*/
public M findFirstBy(String where, Object modelOrMap);
M findFirstBy(String where, Object modelOrMap);
/**
* 通用新增
* @param model 实体类
* @return boolean
*/
public boolean save(M model);
boolean save(M model);
/**
* 新增返回int型主键
* @param model 实体类
* @return int
*/
public int saveRtId(M model);
int saveRtId(M model);
/**
* 新增返回String型主键
* @param model 实体类
* @return String
*/
public String saveRtStrId(M model);
String saveRtStrId(M model);
/**
* 新增一条数据,并自动将主键反射到字段中
* @param model
*/
public boolean saveAndSetKey(M model);
boolean saveAndSetKey(M model);
/**
* 批量插入
* @param list void
*/
public void saveBatch(List<?> list);
void saveBatch(List<?> list);
/**
* 通用修改(null的不入库)
* @param model 实体类
* @return boolean
*/
public boolean update(M model);
boolean update(M model);
/**
* 通用修改(null的也入库)
* @param model
* @return boolean
*/
public boolean updateEveryCol(M model);
boolean updateEveryCol(M model);
/**
* 根据一个model更新一个表内所有数据(非特殊情况慎重使用)
* @param model
* @return int
*/
public int updateAllRecords(M model);
int updateAllRecords(M model);
/**
* 根据条件修改
......@@ -170,28 +175,28 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return boolean
*/
public boolean updateBy(String set, String where, Object modelOrMap);
boolean updateBy(String set, String where, Object modelOrMap);
/**
* 根据实体类集合修改
* @param list 实体类集合
* @return int[]
*/
public int[] updateBathById(List<M> list);
int[] updateBathById(List<M> list);
/**
* 通用删除一条数据
* @param id 主键值
* @return int 删除条数
*/
public int delete(Object id);
int delete(Object id);
/**
* 通用删除多条数据
* @param ids 主键值集合
* @return int 删除条数
*/
public int deleteByIds(String ids);
int deleteByIds(String ids);
/**
* 根据字段名以及字段值删除多条数据
......@@ -199,7 +204,7 @@ public interface IService<M> {
* @param ids 键值集合
* @return int 删除条数
*/
public int deleteByCols(String col, String ids);
int deleteByCols(String col, String ids);
/**
......@@ -209,14 +214,14 @@ public interface IService<M> {
* @param ids 键值集合
* @return int 删除条数
*/
public int deleteTableByCols(String table, String col, String ids);
int deleteTableByCols(String table, String col, String ids);
/**
* 根据多个id集合删除数据
* @param ids id集合(1,2,3)
* @return
*/
public int deleteByStrIds(String ids);
int deleteByStrIds(String ids);
/**
* 根据字段及值删除数据
......@@ -224,7 +229,7 @@ public interface IService<M> {
* @param ids 字段值集合(1,2,3)
* @return
*/
public int deleteByStrCols(String col, String ids);
int deleteByStrCols(String col, String ids);
/**
* 根据表名、字段名、值删除数据
......@@ -233,14 +238,14 @@ public interface IService<M> {
* @param ids 字段值集合(1,2,3)
* @return
*/
public int deleteTableByStrCols(String table, String col, String ids);
int deleteTableByStrCols(String table, String col, String ids);
/**
* 根据sql模板删除
* @param sqlTemplate sql模板
* @return int 删除条数
*/
public int deleteBy(String sqlTemplate);
int deleteBy(String sqlTemplate);
/**
* 根据条件删除
......@@ -248,20 +253,20 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return int 删除条数
*/
public int deleteBy(String where, Object modelOrMap);
int deleteBy(String where, Object modelOrMap);
/**
* 查询总数
* @return int
*/
public long total();
long total();
/**
* 查询符合通用实体类的总数
* @param model 通用实体
* @return long 总数
*/
public long count(M model);
long count(M model);
/**
* 根据条件查询总数
......@@ -269,7 +274,7 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return int 总数
*/
public int count(String where, Object modelOrMap);
int count(String where, Object modelOrMap);
/**
* 查询自定义sql的总数
......@@ -277,7 +282,7 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return int 总数
*/
public int countBy(String sqlTemplate, Object modelOrMap);
int countBy(String sqlTemplate, Object modelOrMap);
/**
* 对整表的分页
......@@ -285,7 +290,7 @@ public interface IService<M> {
* @param size 每页的数据量
* @return List<M> 实体类集合
*/
public List<M> getList(int start, int size);
List<M> getList(int start, int size);
/**
* 找出符合实体类条件的分页
......@@ -294,7 +299,7 @@ public interface IService<M> {
* @param size 每页的数据量
* @return List<M> 实体类集合
*/
public List<M> getList(M model, int start, int size);
List<M> getList(M model, int start, int size);
/**
* 找出符合实体类条件的分页
......@@ -304,7 +309,7 @@ public interface IService<M> {
* @param size 每页的数据量
* @return List<M> 实体类集合
*/
public List<M> getList(String sqlTemplate, Object modelOrMap, int start, int size);
List<M> getList(String sqlTemplate, Object modelOrMap, int start, int size);
/**
* 分页
......@@ -314,7 +319,7 @@ public interface IService<M> {
* @param size 数量
* @return
*/
public BladePage<M> paginate(String sqlTemplate, Object paras, int start, int size);
BladePage<M> paginate(String sqlTemplate, Object paras, int start, int size);
/**
* 根据自定义sql查询是否存在
......@@ -322,14 +327,14 @@ public interface IService<M> {
* @param modelOrMap 实体类或者Map(查询条件)
* @return boolean
*/
public boolean isExist(String sqlTemplate, Object modelOrMap);
boolean isExist(String sqlTemplate, Object modelOrMap);
/**
* 获取model的主键值
* @param model
* @return Object
*/
public Object getIdValue(Object model);
Object getIdValue(Object model);
/**
* 通用新增
......@@ -338,7 +343,7 @@ public interface IService<M> {
* @param ac aop上下文
* @return boolean
*/
public boolean save(M model, AopContext ac);
boolean save(M model, AopContext ac);
/**
* 通用修改(null的不入库)
......@@ -347,7 +352,7 @@ public interface IService<M> {
* @param ac aop上下文
* @return boolean
*/
public boolean update(M model, AopContext ac);
boolean update(M model, AopContext ac);
/**
* 通用删除多条数据(物理)
......@@ -356,7 +361,7 @@ public interface IService<M> {
* @param ac aop上下文
* @return int 删除条数
*/
public boolean removeByIds(String ids, AopContext ac);
boolean removeByIds(String ids, AopContext ac);
/**
* 通用删除多条数据(逻辑)
......@@ -365,7 +370,7 @@ public interface IService<M> {
* @param ac aop上下文
* @return int 删除条数
*/
public boolean delByIds(String ids, AopContext ac);
boolean delByIds(String ids, AopContext ac);
/**
* 通用还原多条数据
......@@ -374,7 +379,7 @@ public interface IService<M> {
* @param ac aop上下文
* @return int 删除条数
*/
public boolean restoreByIds(String ids, AopContext ac);
boolean restoreByIds(String ids, AopContext ac);
/**
* 通用新增
......@@ -384,7 +389,7 @@ public interface IService<M> {
* @param intercept 业务拦截器
* @return boolean
*/
public boolean save(M model, AopContext ac, ICURD intercept);
boolean save(M model, AopContext ac, ICurd intercept);
/**
* 通用修改(null的不入库)
......@@ -394,7 +399,7 @@ public interface IService<M> {
* @param intercept 业务拦截器
* @return boolean
*/
public boolean update(M model, AopContext ac, ICURD intercept);
boolean update(M model, AopContext ac, ICurd intercept);
/**
* 通用删除多条数据(物理)
......@@ -404,7 +409,7 @@ public interface IService<M> {
* @param intercept 业务拦截器
* @return int 删除条数
*/
public boolean removeByIds(String ids, AopContext ac, ICURD intercept);
boolean removeByIds(String ids, AopContext ac, ICurd intercept);
/**
* 通用删除多条数据(逻辑)
......@@ -414,7 +419,7 @@ public interface IService<M> {
* @param intercept 业务拦截器
* @return int 删除条数
*/
public boolean delByIds(String ids, AopContext ac, ICURD intercept);
boolean delByIds(String ids, AopContext ac, ICurd intercept);
/**
* 通用还原多条数据
......@@ -424,6 +429,6 @@ public interface IService<M> {
* @param intercept 业务拦截器
* @return int 删除条数
*/
public boolean restoreByIds(String ids, AopContext ac, ICURD intercept);
boolean restoreByIds(String ids, AopContext ac, ICurd intercept);
}
......@@ -15,16 +15,17 @@
*/
package org.springblade.core.beetl;
import org.springblade.core.toolbox.kit.CharsetKit;
import org.springblade.core.toolbox.kit.FileKit;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Map;
import org.springblade.core.toolbox.kit.CharsetKit;
import org.springblade.core.toolbox.kit.FileKit;
/**
* Beetl静态化生成工具类
* @author zhuangqian
*/
public class BeetlMaker {
......
......@@ -15,30 +15,26 @@
*/
package org.springblade.core.beetl;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.beetl.core.resource.StringTemplateResourceLoader;
import org.springblade.core.beetl.func.AceExt;
import org.springblade.core.beetl.func.BeetlExt;
import org.springblade.core.beetl.func.ShiroExt;
import org.springblade.core.beetl.tag.DropDownTag;
import org.springblade.core.beetl.tag.FootTag;
import org.springblade.core.beetl.tag.HotBlogsTag;
import org.springblade.core.beetl.tag.SelectTag;
import org.springblade.core.beetl.tag.SideBarTag;
import org.springblade.core.beetl.tag.*;
import org.springblade.core.constant.ConstConfig;
import org.springblade.core.toolbox.CMap;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Beetl模板绑值
* @author zhuangqian
*/
public class BeetlTemplate {
private static GroupTemplate gt;
......@@ -62,7 +58,7 @@ public class BeetlTemplate {
}
public static void registerTemplate(GroupTemplate groupTemplate){
Map<String, Object> sharedVars = new HashMap<String, Object>();
Map<String, Object> sharedVars = new HashMap<>(16);
sharedVars.put("startTime", new Date());
sharedVars.put("domain", ConstConfig.DOMAIN);
groupTemplate.setSharedVars(sharedVars);
......
......@@ -20,6 +20,7 @@ import org.beetl.sql.core.annotatoin.Table;
/**
* 适用于oracle字段全部小写的NameConversion
* @author zhuangqian
*/
public class LowerNameConversion extends NameConversion {
......
......@@ -19,8 +19,13 @@ import org.beetl.ext.spring.BeetlGroupUtilConfiguration;
import org.springblade.common.beetl.BeetlRegister;
/**
* beetl初始化类
* @author zhuangqian
*/
public class MyBeetlGroupUtilConfiguration extends BeetlGroupUtilConfiguration {
@Override
public void initOther() {
BeetlTemplate.registerTemplate(groupTemplate);
......
......@@ -23,6 +23,7 @@ import java.util.Collection;
/**
* 重写beetlsql输出的sql语句格式
* @author zhuangqian
*/
public class ReportInterceptor extends DebugInterceptor {
......@@ -66,7 +67,9 @@ public class ReportInterceptor extends DebugInterceptor {
if (ctx.getResult().getClass().isArray()) {
int[] ret = (int[]) ctx.getResult();
for(int i=0;i<ret.length;i++){
if(i>0) sb.append(",");
if(i>0) {
sb.append(",");
}
sb.append(ret[i]);
}
} else {
......
......@@ -15,18 +15,19 @@
*/
package org.springblade.core.beetl.func;
import java.util.HashMap;
import java.util.Map;
import org.springblade.core.constant.ConstCache;
import org.springblade.core.constant.ConstCacheKey;
import org.springblade.core.shiro.ShiroKit;
import org.springblade.core.toolbox.cache.CacheKit;
import org.springblade.core.toolbox.cache.ILoader;
import java.util.HashMap;
import java.util.Map;
/**
* ace工具类
* @author zhuangqian
*/
public class AceExt {
......@@ -35,8 +36,9 @@ public class AceExt {
return "ace-dark.css";
}
Map<String, String> theme = CacheKit.get(ConstCache.SYS_CACHE, ConstCacheKey.ACE_THEME + ShiroKit.getUser().getId(), new ILoader() {
public Object load() {
Map<String, String> map = new HashMap<String, String>();
@Override
public Object load() {
Map<String, String> map = new HashMap<>(16);
map.put("ace", "ace-dark.css");
return map;
}
......
......@@ -15,34 +15,25 @@
*/
package org.springblade.core.beetl.func;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springblade.common.tool.SysCache;
import org.springblade.core.constant.ConstCache;
import org.springblade.core.constant.ConstCacheKey;
import org.springblade.core.constant.ConstConfig;
import org.springblade.core.plugins.dao.Db;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.cache.CacheKit;
import org.springblade.core.toolbox.cache.ILoader;
import org.springblade.core.toolbox.kit.CharsetKit;
import org.springblade.core.toolbox.kit.DateKit;
import org.springblade.core.toolbox.kit.DateTimeKit;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.kit.URLKit;
import org.springblade.core.toolbox.kit.*;
import org.springblade.core.toolbox.support.Convert;
import java.lang.reflect.Array;
import java.util.*;
/**
* beetl注册工具类
* 高频使用方法
* @author zhuangqian
*/
public class BeetlExt {
......@@ -168,7 +159,7 @@ public class BeetlExt {
/**
* 对象是否为空
*
* @param obj
* @param o
* String,List,Map,Object[],int[],long[]
* @return
*/
......@@ -297,7 +288,7 @@ public class BeetlExt {
/**
* 强转->int
*
* @param obj
* @param value
* @return
*/
public int toInt(Object value) {
......@@ -307,7 +298,7 @@ public class BeetlExt {
/**
* 强转->int
*
* @param obj
* @param value
* @param defaultValue
* @return
*/
......@@ -318,7 +309,7 @@ public class BeetlExt {
/**
* 强转->long
*
* @param obj
* @param value
* @return
*/
public long toLong(Object value) {
......@@ -328,7 +319,7 @@ public class BeetlExt {
/**
* 强转->long
*
* @param obj
* @param value
* @param defaultValue
* @return
*/
......@@ -425,7 +416,9 @@ public class BeetlExt {
* @return
*/
public String formatTime(Date date) {
if(isEmpty(date)) return "";
if(isEmpty(date)) {
return "";
}
return DateKit.format(date, "yyyy-MM-dd HH:mm:ss");
}
......@@ -457,7 +450,8 @@ public class BeetlExt {
public String getRightMenu(final Object userId, Object roleId, final String code, boolean isExport) {
Map<String, Object> userRole = CacheKit.get(ConstCache.SYS_CACHE, ConstCacheKey.ROLE_EXT + userId,
new ILoader() {
public Object load() {
@Override
public Object load() {
return Db.selectOne("select * from BLADE_ROLE_EXT where userId=#{userId}", CMap.init().set("userId", userId));
}
});
......
......@@ -21,6 +21,9 @@ import org.beetl.core.GroupTemplate;
import org.springblade.common.vo.ShiroUser;
/**
* @author zhuangqian
*/
public class ShiroExt {
private static final String NAMES_DELIMETER = ",";
......
......@@ -15,13 +15,7 @@
*/
package org.springblade.core.beetl.tag;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.beetl.core.Tag;
import org.springblade.common.vo.TreeNode;
import org.springblade.core.constant.ConstCache;
import org.springblade.core.constant.ConstCacheKey;
......@@ -31,6 +25,14 @@ import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.cache.CacheKit;
import org.springblade.core.toolbox.cache.ILoader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author zhuangqian
*/
public class DropDownTag extends Tag {
@Override
......@@ -48,17 +50,22 @@ public class DropDownTag extends Tag {
int lev = 99;
String code = "";
String sql = "";
if (type.equals("dict")) {
String DICT = "dict";
String USER = "user";
String DEPT = "dept";
String ROLE = "role";
String DIY = "diy";
if (type.equals(DICT)) {
code = codes.split("_")[0];
lev = (codes.split("_").length > 1) ? Func.toInt(codes.split("_")[1]) : 99;
sql = "select ID,(case when PID is null then 0 else PID end) PID,NUM,name as TEXT from BLADE_DICT where code=" + code + " and num > 0 order by num asc";
} else if (type.equals("user")) {
} else if (type.equals(USER)) {
sql = "select ID,ID NUM,0 as PID,name as TEXT from BLADE_USER where status=1";
} else if (type.equals("dept")) {
} else if (type.equals(DEPT)) {
sql = "select ID,(case when PID is null then 0 else PID end) PID,NUM,SIMPLENAME as TEXT from BLADE_DEPT WHERE num>0";
} else if (type.equals("role")) {
} else if (type.equals(ROLE)) {
sql = "select ID,(case when PID is null then 0 else PID end) PID,NUM,name as TEXT from BLADE_ROLE";
} else if (type.equals("diy")) {
} else if (type.equals(DIY)) {
type = type + "_" + param.get("source");
sql = Md.getSql(param.get("source"));
}
......
......@@ -22,6 +22,9 @@ import org.springblade.core.toolbox.kit.DateKit;
import java.io.IOException;
import java.util.Map;
/**
* @author zhuangqian
*/
public class FootTag extends Tag {
public static String company = "springblade.org";
......@@ -56,30 +59,7 @@ public class FootTag extends Tag {
sb.append(" 顶部");
sb.append(" </i>");
sb.append("</a>");
/*sb.append("<div class=\"footer\">");
sb.append(" <div class=\"footer-inner\">");
sb.append(" <div class=\"footer-content\" style=\"padding-bottom:15px;\">");
sb.append(" <span class=\"bigger-120\">");
sb.append(" <span class=\"blue bolder\">" + customer + "</span>");
sb.append(" &nbsp;copyright &copy; "+year);
sb.append(" </span>");
sb.append("&nbsp; &nbsp;");
sb.append(" </div>");
sb.append(" <div style=\"padding-bottom:1px;\">");
sb.append(" <span class=\"bigger-120\">");
sb.append(" <span style=\"font-size:4px;\">技术支持:</span>");
sb.append(" <span style=\"font-size:4px;\" id=\"support_springblade\">" + company + "</span>");
sb.append(" </span>");
sb.append(" </div>");
sb.append(" </div>");
sb.append("</div>");
sb.append("<a href=\"#\" id=\"btn-scroll-up\" class=\"btn-scroll-up btn btn-sm btn-inverse\">");
sb.append(" <i class=\"ace-icon fa fa-angle-double-up icon-only bigger-110\">");
sb.append(" 顶部");
sb.append(" </i>");
sb.append("</a>");*/
ctx.byteWriter.writeString(sb.toString());
} catch (IOException e) {
e.printStackTrace();
......
......@@ -2,6 +2,9 @@ package org.springblade.core.beetl.tag;
import org.beetl.core.GeneralVarTagBinding;
/**
* @author zhuangqian
*/
public class HotBlogsTag extends GeneralVarTagBinding {
@Override
......
......@@ -15,12 +15,7 @@
*/
package org.springblade.core.beetl.tag;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.beetl.core.Tag;
import org.springblade.core.aop.AopContext;
import org.springblade.core.constant.ConstCache;
import org.springblade.core.constant.ConstCacheKey;
......@@ -29,14 +24,21 @@ import org.springblade.core.meta.IQuery;
import org.springblade.core.plugins.dao.Db;
import org.springblade.core.plugins.dao.Md;
import org.springblade.core.shiro.ShiroKit;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.cache.CacheKit;
import org.springblade.core.toolbox.cache.ILoader;
import org.springblade.core.toolbox.kit.ClassKit;
import org.springblade.core.toolbox.kit.JsonKit;
import org.springblade.core.toolbox.kit.StrKit;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author zhuangqian
*/
public class SelectTag extends Tag {
@Override
......@@ -61,23 +63,28 @@ public class SelectTag extends Tag {
IQuery intercept = Cst.me().getDefaultQueryFactory();
String CACHE_NAME = ConstCache.SYS_CACHE;
if (type.equals("dict")) {
String DICT = "dict";
String USER = "user";
String DEPT = "dept";
String ROLE = "role";
String DIY = "diy";
if (type.equals(DICT)) {
sql = "select num as ID,pId as PID,name as TEXT from BLADE_DICT where code='" + code + "' and num > 0 order by num asc";
intercept = Cst.me().getDefaultSelectFactory().dictIntercept();
} else if (type.equals("user")) {
} else if (type.equals(USER)) {
CACHE_NAME = ConstCache.SYS_CACHE;
sql = "select ID,name as TEXT from BLADE_USER where status=1";
intercept = Cst.me().getDefaultSelectFactory().userIntercept();
} else if (type.equals("dept")) {
} else if (type.equals(DEPT)) {
CACHE_NAME = ConstCache.SYS_CACHE;
sql = "select ID,PID,SIMPLENAME as TEXT from BLADE_DEPT";
intercept = Cst.me().getDefaultSelectFactory().deptIntercept();
} else if (type.equals("role")) {
} else if (type.equals(ROLE)) {
CACHE_NAME = ConstCache.SYS_CACHE;
sql = "select ID,name as TEXT from BLADE_ROLE";
intercept = Cst.me().getDefaultSelectFactory().roleIntercept();
} else if (type.equals("diy")) {
} else if (type.equals(DIY)) {
CACHE_NAME = ConstCache.SYS_CACHE;
type = type + "_" + param.get("source");
if(StrKit.notBlank(where)){
......
......@@ -15,24 +15,26 @@
*/
package org.springblade.core.beetl.tag;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.support.Convert;
import org.beetl.core.Tag;
import org.springblade.common.vo.TreeNode;
import org.springblade.core.constant.ConstCache;
import org.springblade.core.constant.ConstCacheKey;
import org.springblade.core.constant.Cst;
import org.springblade.core.plugins.dao.Db;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.support.Convert;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @author zhuangqian
*/
public class SideBarTag extends Tag {
private List<TreeNode> nodeList = new ArrayList<TreeNode>();
......@@ -178,7 +180,10 @@ public class SideBarTag extends Tag {
Str += " </a>";
Str += " <b class=\"arrow\"></b>";
subStr = this.reloadMenu(sideBar, _code, Str, _levels, ctxPath);// 递归寻找子菜单
/**
* 递归寻找子菜单
*/
subStr = this.reloadMenu(sideBar, _code, Str, _levels, ctxPath);
Str = Func.isEmpty(subStr) ? Str : subStr;
}
......@@ -197,7 +202,7 @@ public class SideBarTag extends Tag {
public String getDropDownClass(String code,String dropdownclass){
Iterator<TreeNode> it = nodeList.iterator();
while (it.hasNext()) {
TreeNode n = (TreeNode) it.next();
TreeNode n = it.next();
if(n.getId().equals(code)&&n.isParent()){
return dropdownclass;
}
......
......@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* blade配置
* @author zhuangqian
*/
public class BladeConfig {
......
......@@ -20,6 +20,7 @@ import org.springblade.core.plugins.IPluginHolder;
/**
* Blade配置型接口
* @author zhuangqian
*/
public interface IConfig {
......
......@@ -16,6 +16,9 @@
package org.springblade.core.constant;
/**
* @author zhuangqian
*/
public interface Const {
/**
......
......@@ -17,13 +17,23 @@ package org.springblade.core.constant;
/**
* 缓存名
* @author zhuangqian
*/
public interface ConstCache {
String DEFAULT_CACHE = "DEFAULT_CACHE";//默认变量1小时
String LONG_CACHE = "LONG_CACHE";//全局永久变量
String SYS_CACHE = "SYS_CACHE";//系统变量 10小时
/**
* 默认变量1小时
*/
String DEFAULT_CACHE = "DEFAULT_CACHE";
/**
* 全局永久变量
*/
String LONG_CACHE = "LONG_CACHE";
/**
* 系统变量 10小时
*/
String SYS_CACHE = "SYS_CACHE";
}
......@@ -15,6 +15,9 @@
*/
package org.springblade.core.constant;
/**
* @author zhuangqian
*/
public interface ConstCacheKey {
//-----------------------------menu---------------------------------------
......
......@@ -15,10 +15,13 @@
*/
package org.springblade.core.constant;
import java.util.Map;
import org.springblade.core.listener.ConfigListener;
import java.util.Map;
/**
* @author zhuangqian
*/
public interface ConstConfig {
Map<String, String> pool = ConfigListener.getConf();
......
......@@ -15,7 +15,9 @@
*/
package org.springblade.core.constant;
/**
* @author zhuangqian
*/
public interface ConstCurd {
/**
* 定义首页转向key
......
......@@ -15,6 +15,9 @@
*/
package org.springblade.core.constant;
/**
* @author zhuangqian
*/
public interface ConstShiro {
/**
* 超级管理员
......
......@@ -15,12 +15,10 @@
*/
package org.springblade.core.constant;
import java.math.BigDecimal;
import org.springblade.core.intercept.CURDInterceptor;
import org.springblade.core.intercept.QueryInterceptor;
import org.springblade.core.intercept.SelectInterceptor;
import org.springblade.core.meta.ICURD;
import org.springblade.core.meta.ICurd;
import org.springblade.core.meta.IQuery;
import org.springblade.core.meta.ISelect;
import org.springblade.core.shiro.DefaultShiroFactory;
......@@ -36,8 +34,11 @@ import org.springblade.core.toolbox.grid.JqGridFactory;
import org.springblade.core.toolbox.log.BladeLogFactory;
import org.springblade.core.toolbox.log.ILog;
import java.math.BigDecimal;
/**
* Blade系统配置类
* @author zhuangqian
*/
public class Cst {
......@@ -144,7 +145,7 @@ public class Cst {
/**
* 默认CURD工厂类
*/
private ICURD defaultCURDFactory = new CURDInterceptor();
private ICurd defaultCURDFactory = new CURDInterceptor();
/**
* 默认查询工厂类
......@@ -326,11 +327,11 @@ public class Cst {
this.defaultFileProxyFactory = defaultFileProxyFactory;
}
public ICURD getDefaultCURDFactory() {
public ICurd getDefaultCURDFactory() {
return defaultCURDFactory;
}
public void setDefaultCURDFactory(ICURD defaultCURDFactory) {
public void setDefaultCURDFactory(ICurd defaultCURDFactory) {
this.defaultCURDFactory = defaultCURDFactory;
}
......
......@@ -19,6 +19,10 @@ import org.springblade.core.constant.ConstShiro;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* 权限异常处理
* @author zhuangqian
*/
@SuppressWarnings("serial")
@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = ConstShiro.NO_PERMISSION)
public class NoPermissionException extends RuntimeException {
......
......@@ -19,6 +19,10 @@ import org.springblade.core.constant.ConstShiro;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* 无用户异常
* @author zhuangqian
*/
@SuppressWarnings("serial")
@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = ConstShiro.NO_USER)
public class NoUserException extends RuntimeException {
......
......@@ -19,6 +19,7 @@ import org.springblade.core.toolbox.kit.StrKit;
/**
* 工具类初始化异常
* @author zhuangqian
*/
public class ToolBoxException extends RuntimeException{
private static final long serialVersionUID = 8247610319171014183L;
......
......@@ -17,6 +17,10 @@ package org.springblade.core.intercept;
import org.springblade.core.toolbox.ajax.AjaxResult;
/**
* 拦截器
* @author zhuangqian
*/
public abstract class BladeInterceptor implements Interceptor{
protected AjaxResult result = new AjaxResult();
......
......@@ -47,7 +47,8 @@ public abstract class BladeValidator extends BladeInterceptor {
}
}
final public Object intercept(Invocation inv) {
@Override
final public Object intercept(Invocation inv) {
BladeValidator validator = null;
try {
validator = getClass().newInstance();
......@@ -134,15 +135,18 @@ public abstract class BladeValidator extends BladeInterceptor {
protected void validateRequired(String field, String errorMessage) {
String value = request.getParameter(field);
if (value == null || "".equals(value)) // 经测试,form表单域无输入时值为"",跳格键值为"\t",输入空格则为空格" "
addError(errorMessage);
{
addError(errorMessage);
}
}
/**
* Validate required string.
*/
protected void validateRequiredString(String field, String errorMessage) {
if (StrKit.isBlank(request.getParameter(field)))
addError(errorMessage);
if (StrKit.isBlank(request.getParameter(field))) {
addError(errorMessage);
}
}
/**
......@@ -162,8 +166,9 @@ public abstract class BladeValidator extends BladeInterceptor {
}
try {
int temp = Integer.parseInt(value.trim());
if (temp < min || temp > max)
addError(errorMessage);
if (temp < min || temp > max) {
addError(errorMessage);
}
} catch (Exception e) {
addError(errorMessage);
}
......@@ -204,8 +209,9 @@ public abstract class BladeValidator extends BladeInterceptor {
}
try {
long temp = Long.parseLong(value.trim());
if (temp < min || temp > max)
addError(errorMessage);
if (temp < min || temp > max) {
addError(errorMessage);
}
} catch (Exception e) {
addError(errorMessage);
}
......@@ -242,8 +248,9 @@ public abstract class BladeValidator extends BladeInterceptor {
}
try {
double temp = Double.parseDouble(value.trim());
if (temp < min || temp > max)
addError(errorMessage);
if (temp < min || temp > max) {
addError(errorMessage);
}
} catch (Exception e) {
addError(errorMessage);
}
......@@ -291,8 +298,9 @@ public abstract class BladeValidator extends BladeInterceptor {
}
try {
Date temp = DateKit.parseTime(Func.toStr(value));
if (temp.before(min) || temp.after(max))
addError(errorMessage);
if (temp.before(min) || temp.after(max)) {
addError(errorMessage);
}
} catch (Exception e) {
addError(errorMessage);
}
......@@ -320,16 +328,18 @@ public abstract class BladeValidator extends BladeInterceptor {
String errorMessage) {
String value_1 = request.getParameter(field_1);
String value_2 = request.getParameter(field_2);
if (value_1 == null || value_2 == null || (!value_1.equals(value_2)))
addError(errorMessage);
if (value_1 == null || value_2 == null || (!value_1.equals(value_2))) {
addError(errorMessage);
}
}
/**
* Validate equal string.
*/
protected void validateEqualString(String s1, String s2, String errorMessage) {
if (s1 == null || s2 == null || (!s1.equals(s2)))
addError(errorMessage);
if (s1 == null || s2 == null || (!s1.equals(s2))) {
addError(errorMessage);
}
}
/**
......@@ -337,8 +347,9 @@ public abstract class BladeValidator extends BladeInterceptor {
*/
protected void validateEqualInteger(Integer i1, Integer i2,
String errorMessage) {
if (i1 == null || i2 == null || (i1.intValue() != i2.intValue()))
addError(errorMessage);
if (i1 == null || i2 == null || (i1.intValue() != i2.intValue())) {
addError(errorMessage);
}
}
/**
......@@ -359,8 +370,9 @@ public abstract class BladeValidator extends BladeInterceptor {
}
try {
value = value.trim();
if (value.startsWith("https://"))
value = "http://" + value.substring(8); // URL doesn't
if (value.startsWith("https://")) {
value = "http://" + value.substring(8); // URL doesn't
}
// understand the https
// protocol, hack it
new URL(value);
......@@ -382,8 +394,9 @@ public abstract class BladeValidator extends BladeInterceptor {
Pattern pattern = isCaseSensitive ? Pattern.compile(regExpression)
: Pattern.compile(regExpression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(value);
if (!matcher.matches())
addError(errorMessage);
if (!matcher.matches()) {
addError(errorMessage);
}
}
/**
......@@ -409,8 +422,9 @@ public abstract class BladeValidator extends BladeInterceptor {
addError(errorMessage);
return;
}
if (value.length() < minLen || value.length() > maxLen)
addError(errorMessage);
if (value.length() < minLen || value.length() > maxLen) {
addError(errorMessage);
}
}
/**
......
......@@ -16,13 +16,14 @@
package org.springblade.core.intercept;
import org.springblade.core.aop.AopContext;
import org.springblade.core.meta.ICURD;
import org.springblade.core.meta.ICurd;
import org.springblade.core.toolbox.ajax.AjaxResult;
/**
* 增删改查拦截器工厂类
* @author zhuangqian
*/
public class CURDInterceptor implements ICURD{
public class CURDInterceptor implements ICurd {
@Override
public void saveBefore(AopContext ac) {
......
......@@ -19,6 +19,7 @@ import org.springblade.core.aop.Invocation;
/**
* 自定义拦截器接口
* @author zhuangqian
*/
public interface Interceptor {
......
......@@ -20,8 +20,9 @@ import org.springblade.core.meta.IQuery;
/**
* 通用查询拦截器工厂类
* @author zhuangqian
*/
public class QueryInterceptor implements IQuery{
public class QueryInterceptor implements IQuery {
@Override
public void queryBefore(AopContext ac) {
......
......@@ -20,6 +20,7 @@ import org.springblade.core.meta.ISelect;
/**
* select查询拦截器工厂类
* @author zhuangqian
*/
public class SelectInterceptor implements ISelect {
......
......@@ -15,22 +15,25 @@
*/
package org.springblade.core.listener;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springblade.core.constant.Const;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.kit.ObjectKit;
import org.springblade.core.toolbox.kit.PropKit;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* 配置监听
* @author zhuangqian
*/
public class ConfigListener implements ServletContextListener {
private static Map<String, String> conf = new HashMap<String, String>();
private static Map<String, String> conf = new HashMap<>();
public static Map<String, String> getConf() {
return ObjectKit.clone(conf);
......@@ -44,7 +47,7 @@ public class ConfigListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent evt) {
ServletContext sc = evt.getServletContext();
// 项目路径
conf.put("realPath", sc.getRealPath("/"));
conf.put("contextPath", sc.getContextPath());
......
......@@ -22,13 +22,14 @@ import org.springblade.core.plugins.PluginFactory;
import org.springblade.core.plugins.PluginManager;
import org.springblade.core.plugins.logo.LogoPlugin;
import org.springblade.core.plugins.redis.RedisPlugin;
import org.springblade.core.plugins.dao.SQLManagerPlugin;
import org.springblade.core.plugins.dao.SqlManagerPlugin;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
/**
* 启动监听器
* @author zhuangqian
*/
@Component
public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {
......@@ -55,10 +56,13 @@ public class StartupListener implements ApplicationListener<ContextRefreshedEven
*/
private void registerPlugins() {
IPluginHolder plugins = PluginFactory.init();
plugins.register(SQLManagerPlugin.init());
plugins.register(SqlManagerPlugin.init());
plugins.register(RedisPlugin.init());
plugins.register(new LogoPlugin());
BladeConfig.getConf().registerPlugins(plugins);//自定义配置插件
/**
* 自定义配置插件
*/
BladeConfig.getConf().registerPlugins(plugins);
PluginManager.init().start();
}
......
......@@ -24,6 +24,7 @@ import org.springblade.core.plugins.PluginManager;
/**
* 关闭监听器
* @author zhuangqian
*/
@Component
public class StopListener implements ApplicationListener<ContextClosedEvent> {
......
......@@ -20,110 +20,106 @@ import org.springblade.core.toolbox.ajax.AjaxResult;
/**
* 增删改查aop
* @author zhuangqian
*/
public interface ICURD {
/**
* 主表新增前操作
*
* @param ac
*/
public interface ICurd {
/**
* 主表新增前操作
* @param ac 拦截器
*/
void saveBefore(AopContext ac);
/**
* 主表新增后操作(事务内)
*
* @param ac
*/
/**
* 主表新增后操作(事务内)
* @param ac 拦截器
* @return
*/
boolean saveAfter(AopContext ac);
/**
* 新增全部完毕后操作(事务外)
*
* @param ac
* @param ac 拦截器
* @return
*/
AjaxResult saveSucceed(AopContext ac);
/**
* 主表修改前操作
*
* @param ac
* @param ac 拦截器
*/
void updateBefore(AopContext ac);
/**
* 主表修改后操作(事务内)
*
* @param ac
* @param ac 拦截器
* @return
*/
boolean updateAfter(AopContext ac);
/**
* 修改全部完毕后操作(事务外)
*
* @param ac
* @param ac 拦截器
* @return
*/
AjaxResult updateSucceed(AopContext ac);
/**
* 物理删除前操作
*
* @param ac
*/
void removeBefore(AopContext ac);
/**
* 物理删除后操作(事务内)
*
* @param ac
* @return
*/
boolean removeAfter(AopContext ac);
/**
* 物理删除全部完毕后操作(事务外)
*
* @param ac
* @return AjaxResult
*/
AjaxResult removeSucceed(AopContext ac);
/**
* 逻辑删除前操作
*
* @param ac
*/
void delBefore(AopContext ac);
/**
* 逻辑删除后操作(事务内)
*
* @param ac
* @return
*/
boolean delAfter(AopContext ac);
/**
* 逻辑删除后操作(事务外)
*
* @param ac
* @return AjaxResult
*/
AjaxResult delSucceed(AopContext ac);
/**
* 主表还原前操作
*
* @param ac
*/
void restoreBefore(AopContext ac);
/**
* 主表还原后操作(事务内)
*
* @param ac
* @return
*/
boolean restoreAfter(AopContext ac);
/**
* 还原全部完毕后操作(事务外)
*
* @param ac
* @return
*/
AjaxResult restoreSucceed(AopContext ac);
}
......@@ -19,6 +19,7 @@ import java.util.Map;
/**
* 定义CURD元数据接口
* @author zhuangqian
*/
public interface IMeta {
......
......@@ -19,6 +19,7 @@ import org.springblade.core.aop.AopContext;
/**
* 分页aop
* @author zhuangqian
*/
public interface IQuery {
......
......@@ -19,6 +19,7 @@ import org.springblade.core.aop.AopContext;
/**
* 页面跳转aop
* @author zhuangqian
*/
public interface IRender {
......@@ -27,26 +28,26 @@ public interface IRender {
*
* @param ac
*/
public void renderIndexBefore(AopContext ac);
void renderIndexBefore(AopContext ac);
/**
* 新增转向前操作
*
* @param ac
*/
public void renderAddBefore(AopContext ac);
void renderAddBefore(AopContext ac);
/**
* 修改转向前操作
*
* @param ac
*/
public void renderEditBefore(AopContext ac);
void renderEditBefore(AopContext ac);
/**
* 查看转向前操作
*
* @param ac
*/
public void renderViewBefore(AopContext ac);
void renderViewBefore(AopContext ac);
}
......@@ -17,15 +17,32 @@ package org.springblade.core.meta;
/**
* select aop
* @author zhuangqian
*/
public interface ISelect {
/**
* 用户
* @return
*/
IQuery userIntercept();
/**
* 部门
* @return
*/
IQuery deptIntercept();
/**
* 字典
* @return
*/
IQuery dictIntercept();
/**
* 角色
* @return
*/
IQuery roleIntercept();
}
......@@ -25,8 +25,9 @@ import org.springblade.core.toolbox.ajax.AjaxResult;
* (适用于后端校验、多表操作等)<br>
* 已自带事务回滚机制,无需自行设置<br>
* 如果出错直接抛异常即可回滚<br>
* @author zhuangqian
*/
public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
public class MetaIntercept extends MetaTool implements IQuery, IRender, ICurd {
protected AjaxResult result = new AjaxResult();
......@@ -35,6 +36,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void queryBefore(AopContext ac) {
}
......@@ -44,6 +46,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void queryAfter(AopContext ac) {
}
......@@ -53,6 +56,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void renderIndexBefore(AopContext ac) {
}
......@@ -62,6 +66,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void renderAddBefore(AopContext ac) {
}
......@@ -71,6 +76,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void renderEditBefore(AopContext ac) {
}
......@@ -80,6 +86,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void renderViewBefore(AopContext ac) {
}
......@@ -89,6 +96,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void saveBefore(AopContext ac) {
}
......@@ -98,6 +106,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public boolean saveAfter(AopContext ac) {
return true;
}
......@@ -107,6 +116,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public AjaxResult saveSucceed(AopContext ac) {
return result.addSuccess(ConstCurd.SAVE_SUCCESS_MSG);
}
......@@ -116,6 +126,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void updateBefore(AopContext ac) {
}
......@@ -125,6 +136,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public boolean updateAfter(AopContext ac) {
return true;
}
......@@ -134,6 +146,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public AjaxResult updateSucceed(AopContext ac) {
return result.addSuccess(ConstCurd.UPDATE_SUCCESS_MSG);
}
......@@ -143,6 +156,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void removeBefore(AopContext ac) {
}
......@@ -152,6 +166,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public boolean removeAfter(AopContext ac) {
return true;
}
......@@ -161,6 +176,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public AjaxResult removeSucceed(AopContext ac) {
return result.addSuccess(ConstCurd.DEL_SUCCESS_MSG);
}
......@@ -170,6 +186,7 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
@Override
public void delBefore(AopContext ac) {
}
......@@ -179,7 +196,8 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
public boolean delAfter(AopContext ac) {
@Override
public boolean delAfter(AopContext ac) {
return true;
}
......@@ -188,7 +206,8 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
public AjaxResult delSucceed(AopContext ac) {
@Override
public AjaxResult delSucceed(AopContext ac) {
return result.addSuccess(ConstCurd.DEL_SUCCESS_MSG);
}
......@@ -197,7 +216,8 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
public void restoreBefore(AopContext ac) {
@Override
public void restoreBefore(AopContext ac) {
}
......@@ -206,7 +226,8 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
public boolean restoreAfter(AopContext ac) {
@Override
public boolean restoreAfter(AopContext ac) {
return true;
}
......@@ -215,7 +236,8 @@ public class MetaIntercept extends MetaTool implements IQuery, IRender, ICURD{
*
* @param ac
*/
public AjaxResult restoreSucceed(AopContext ac) {
@Override
public AjaxResult restoreSucceed(AopContext ac) {
return result.addSuccess(ConstCurd.RESTORE_SUCCESS_MSG);
}
......
......@@ -15,20 +15,26 @@
*/
package org.springblade.core.meta;
import java.util.Map;
import org.springblade.core.constant.ConstCurd;
import java.util.Map;
/**
* @author zhuangqian
*/
public abstract class MetaManager extends MetaTool implements IMeta,ConstCurd {
@Override
public Class<? extends MetaIntercept> intercept() {
return null;
}
@Override
public String paraPrefix() {
return null;
}
@Override
public Map<String, Object> switchMap() {
return null;
}
......
......@@ -19,6 +19,10 @@ import org.beetl.sql.core.annotatoin.Table;
import org.springblade.core.base.model.BaseModel;
/**
* @author zhuangqian
*/
public class MetaTool {
/**
......
......@@ -17,12 +17,17 @@ package org.springblade.core.meta;
import org.springblade.core.aop.AopContext;
public class PageIntercept extends MetaTool implements IQuery{
/**
* @author zhuangqian
*/
public class PageIntercept extends MetaTool implements IQuery {
@Override
public void queryBefore(AopContext ac) {
}
@Override
public void queryAfter(AopContext ac) {
}
......
......@@ -17,6 +17,7 @@ package org.springblade.core.plugins;
/**
* IPlugin插件接口
* @author zhuangqian
*/
public interface IPlugin {
......
......@@ -19,6 +19,7 @@ import java.util.List;
/**
* IPluginFactroy插件管理接口
* @author zhuangqian
*/
public interface IPluginHolder {
......@@ -30,6 +31,7 @@ public interface IPluginHolder {
/**
* 获取插件
* @return
*/
List<IPlugin> getPlugins();
......
......@@ -18,6 +18,10 @@ package org.springblade.core.plugins;
import java.util.ArrayList;
import java.util.List;
/**
* 插件工厂
* @author zhuangqian
*/
public class PluginFactory implements IPluginHolder {
private static List<IPlugin> plugins = new ArrayList<>();
......@@ -29,11 +33,13 @@ public class PluginFactory implements IPluginHolder {
private PluginFactory(){}
public void register(IPlugin plugin) {
@Override
public void register(IPlugin plugin) {
plugins.add(plugin);
}
public List<IPlugin> getPlugins() {
@Override
public List<IPlugin> getPlugins() {
return plugins;
}
......
......@@ -17,6 +17,10 @@ package org.springblade.core.plugins;
import java.util.List;
/**
* 插件统一管理
* @author zhuangqian
*/
public class PluginManager implements IPlugin {
private static List<IPlugin> plugins = PluginFactory.init().getPlugins();
......@@ -28,13 +32,15 @@ public class PluginManager implements IPlugin {
private PluginManager(){}
public void start() {
@Override
public void start() {
for(IPlugin plugin : plugins){
plugin.start();
}
}
public void stop() {
@Override
public void stop() {
for(IPlugin plugin : plugins){
plugin.stop();
}
......
......@@ -35,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* beetlsql 自动API封装dao工具
* @author zhuangqian
*/
@SuppressWarnings({"unchecked","rawtypes"})
public class Blade {
......@@ -52,7 +53,7 @@ public class Blade {
DbName dbName = modelClass.getAnnotation(DbName.class);
if (null == dbName){
sql = dao();
this.dbName = SQLManagerPlugin.init().MASTER;
this.dbName = SqlManagerPlugin.init().MASTER;
} else {
sql = dao(dbName.name());
this.dbName = dbName.name();
......@@ -68,7 +69,7 @@ public class Blade {
* @return
*/
public static SQLManager dao() {
return dao(SQLManagerPlugin.init().MASTER);
return dao(SqlManagerPlugin.init().MASTER);
}
/**
......@@ -77,7 +78,7 @@ public class Blade {
* @return
*/
public static SQLManager dao(String name) {
return SQLManagerPlugin.init().getSqlManagerPool().get(name);
return SqlManagerPlugin.init().getSqlManagerPool().get(name);
}
/**
......@@ -93,7 +94,7 @@ public class Blade {
if (null == blade) {
DbName dbName = modelClass.getAnnotation(DbName.class);
if (null == dbName){
blade = new Blade(SQLManagerPlugin.init().MASTER, modelClass);
blade = new Blade(SqlManagerPlugin.init().MASTER, modelClass);
} else {
blade = new Blade(dbName.name(), modelClass);
}
......@@ -432,9 +433,18 @@ public class Blade {
}
// 3.乐观锁控制
CMap modelForm = CMap.parse(model);
if (modelForm.get(Const.OPTIMISTIC_LOCK.toLowerCase()) != null) { // 是否需要乐观锁控制
int versionDB = Func.toInt(modelOld.get(Const.OPTIMISTIC_LOCK.toLowerCase()), 0); // 数据库中的版本号
int versionForm = Func.toInt(modelForm.get(Const.OPTIMISTIC_LOCK.toLowerCase()), 1); // 表单中的版本号
/**
* 是否需要乐观锁控制
*/
if (modelForm.get(Const.OPTIMISTIC_LOCK.toLowerCase()) != null) {
/**
* 数据库中的版本号
*/
int versionDB = Func.toInt(modelOld.get(Const.OPTIMISTIC_LOCK.toLowerCase()), 0);
/**
* 表单中的版本号
*/
int versionForm = Func.toInt(modelForm.get(Const.OPTIMISTIC_LOCK.toLowerCase()), 1);
if (!(versionForm > versionDB)) {
throw new RuntimeException("表单数据版本号和数据库数据版本号不一致,可能数据已经被其他人修改,请重新编辑");
}
......
......@@ -27,6 +27,7 @@ import java.util.Map;
/**
* beetlsql Dao工具
* @author zhuangqian
*/
public class Db {
......
......@@ -15,25 +15,28 @@
*/
package org.springblade.core.plugins.dao;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.beetl.sql.core.OnConnection;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.SQLReady;
import org.springblade.core.aop.AopContext;
import org.springblade.core.constant.Cst;
import org.springblade.core.meta.IQuery;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.cache.CacheKit;
import org.springblade.core.toolbox.cache.ILoader;
import org.springblade.core.toolbox.grid.BladePage;
import org.springblade.core.toolbox.kit.StrKit;
import org.springblade.core.toolbox.support.Convert;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Db工具类
* @author zhuangqian
*/
@SuppressWarnings({"unchecked","rawtypes"})
public class DbManager {
private static Map<String, DbManager> pool = new ConcurrentHashMap<String, DbManager>();
......@@ -41,7 +44,7 @@ public class DbManager {
private volatile SQLManager sql = null;
public static DbManager init() {
return init(SQLManagerPlugin.init().MASTER);
return init(SqlManagerPlugin.init().MASTER);
}
public static DbManager init(String name) {
......@@ -59,7 +62,7 @@ public class DbManager {
}
private DbManager(String dbName) {
this.sql = SQLManagerPlugin.init().getSqlManagerPool().get(dbName);
this.sql = SqlManagerPlugin.init().getSqlManagerPool().get(dbName);
}
private DbManager() {}
......@@ -67,7 +70,7 @@ public class DbManager {
private SQLManager getSqlManager() {
if (null == sql) {
synchronized (DbManager.class) {
sql = SQLManagerPlugin.init().getSqlManagerPool().get(SQLManagerPlugin.init().MASTER);
sql = SqlManagerPlugin.init().getSqlManagerPool().get(SqlManagerPlugin.init().MASTER);
}
}
return sql;
......@@ -295,7 +298,7 @@ public class DbManager {
/** 查询aop返回单条数据
* @param sqlTemplate
* @param paras
* @param param
* @param ac
* @return
*/
......@@ -305,7 +308,7 @@ public class DbManager {
/**查询aop返回多条数据
* @param sqlTemplate
* @param paras
* @param param
* @param ac
* @return
*/
......@@ -315,7 +318,7 @@ public class DbManager {
/** 查询aop返回单条数据
* @param sqlTemplate
* @param paras
* @param param
* @param ac
* @param intercept
* @return
......@@ -338,7 +341,7 @@ public class DbManager {
/**查询aop返回多条数据
* @param sqlTemplate
* @param paras
* @param param
* @param ac
* @param intercept
* @return
......@@ -371,6 +374,7 @@ public class DbManager {
final String _sqlTemplate = sqlTemplate;
final Object _paras = paras;
return CacheKit.get(cacheName, key, new ILoader() {
@Override
public Object load() {
return selectOne(_sqlTemplate, _paras);
}
......@@ -389,6 +393,7 @@ public class DbManager {
final String _sqlTemplate = sqlTemplate;
final Object _paras = paras;
return CacheKit.get(cacheName, key, new ILoader() {
@Override
public Object load() {
return selectList(_sqlTemplate, _paras);
}
......@@ -412,7 +417,8 @@ public class DbManager {
pk = (String) Func.getValue(pk, "ID");
if(Func.isOracle()){
String pkValue = paras.getStr(pk);
if(pkValue.indexOf(".nextval") > 0){
String nextVal = ".nextval";
if(pkValue.indexOf(nextVal) > 0){
Map<String, Object> map = selectOne("select " + pkValue + " as PK from dual");
Object val = map.get("PK");
paras.set(pk, val);
......@@ -512,7 +518,7 @@ public class DbManager {
* @return
*/
public <T> List<T> getList(String sqlTemplate, Class<T> clazz, Object paras, int pageNum, int pageSize) {
List<T> all = (List<T>) getSqlManager().execute(sqlTemplate, clazz, paras, (pageNum - 1) * pageSize + 1, pageSize);
List<T> all = getSqlManager().execute(sqlTemplate, clazz, paras, (pageNum - 1) * pageSize + 1, pageSize);
return all;
}
......@@ -545,7 +551,6 @@ public class DbManager {
* 分页
* @param sqlTemplate sql语句
* @param sqlCount count语句
* @param clazz 返回类型
* @param paras 参数
* @param pageNum 页号
* @param pageSize 数量
......
......@@ -15,17 +15,17 @@
*/
package org.springblade.core.plugins.dao;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import org.beetl.sql.core.SQLResult;
import org.beetl.sql.core.db.KeyHolder;
import org.springblade.core.toolbox.grid.BladePage;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* beetlsql MarkDown模式sql管理工具
* @author zhuangqian
*/
public class Md {
......
......@@ -15,24 +15,24 @@
*/
package org.springblade.core.plugins.dao;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.SQLResult;
import org.beetl.sql.core.db.KeyHolder;
import org.beetl.sql.core.engine.PageQuery;
import org.springblade.core.beetl.BeetlTemplate;
import org.springblade.core.toolbox.cache.CacheKit;
import org.springblade.core.toolbox.cache.ILoader;
import org.springblade.core.toolbox.grid.BladePage;
import org.springblade.core.toolbox.kit.StrKit;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* beetlsql MarkDown模式sql管理工具
* @author zhuangqian
*/
public class MdManager {
private static Map<String, MdManager> pool = new ConcurrentHashMap<String, MdManager>();
......@@ -40,7 +40,7 @@ public class MdManager {
private volatile SQLManager sql = null;
public static MdManager init() {
return init(SQLManagerPlugin.init().MASTER);
return init(SqlManagerPlugin.init().MASTER);
}
public static MdManager init(String name) {
......@@ -58,7 +58,7 @@ public class MdManager {
}
private MdManager(String dbName) {
this.sql = SQLManagerPlugin.init().getSqlManagerPool().get(dbName);
this.sql = SqlManagerPlugin.init().getSqlManagerPool().get(dbName);
}
private MdManager() {}
......@@ -66,7 +66,7 @@ public class MdManager {
private SQLManager getSqlManager() {
if (null == sql) {
synchronized (MdManager.class) {
sql = SQLManagerPlugin.init().getSqlManagerPool().get(SQLManagerPlugin.init().MASTER);
sql = SqlManagerPlugin.init().getSqlManagerPool().get(SqlManagerPlugin.init().MASTER);
}
}
return sql;
......@@ -248,7 +248,7 @@ public class MdManager {
* @return
*/
public <T> BladePage<T> paginate(String sqlId, Class<T> clazz, Object paras, int pageNum, int pageSize, String orderBy){
PageQuery<T> query = new PageQuery<T>();
PageQuery<T> query = new PageQuery<>();
query.setPageNumber(pageNum);
query.setPageSize(pageSize);
query.setParas(paras);
......@@ -278,8 +278,9 @@ public class MdManager {
* @return
*/
public KeyHolder insert(String sqlId, Object paras, String keyName) {
if (StrKit.isBlank(keyName))
return null;
if (StrKit.isBlank(keyName)) {
return null;
}
KeyHolder holder = new KeyHolder();
getSqlManager().insert(sqlId, paras, holder, keyName);
return (getSqlManager().insert(sqlId, paras, holder, keyName) > 0) ? holder : null;
......
......@@ -27,8 +27,9 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* SQLManager插件
* @author zhuangqian
*/
public class SQLManagerPlugin implements IPlugin {
public class SqlManagerPlugin implements IPlugin {
private static Map<String, SQLManager> sqlManagerPool = new ConcurrentHashMap<String, SQLManager>();
public String MASTER = "master";
......@@ -37,14 +38,15 @@ public class SQLManagerPlugin implements IPlugin {
return sqlManagerPool;
}
private SQLManagerPlugin() { }
private SqlManagerPlugin() { }
private static SQLManagerPlugin me = new SQLManagerPlugin();
private static SqlManagerPlugin me = new SqlManagerPlugin();
public static SQLManagerPlugin init(){
public static SqlManagerPlugin init(){
return me;
}
@Override
public void start() {
try {
//注入sqlmanager
......@@ -52,7 +54,8 @@ public class SQLManagerPlugin implements IPlugin {
SQLManager sm = BladeConfig.getSqlManagerPool().get(key);
//增加自定义@AssignID注解的值, 使用方式: @Assign("uuid")
sm.addIdAutonGen("uuid", new IDAutoGen<String>() {
public String nextID(String arg0) {
@Override
public String nextID(String arg0) {
return UUID.randomUUID().toString();
}
});
......@@ -66,6 +69,7 @@ public class SQLManagerPlugin implements IPlugin {
}
}
@Override
public void stop() {
sqlManagerPool.clear();
LogKit.println("SQLManagerPlugin关闭成功");
......
......@@ -17,12 +17,18 @@ package org.springblade.core.plugins.logo;
import org.springblade.core.plugins.IPlugin;
/**
* logo打印插件
* @author zhuangqian
*/
public class LogoPlugin implements IPlugin {
@Override
public void start() {
printLogo();
}
@Override
public void stop() {
printLogo();
}
......
/**
* Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
* Copyright (c) 2011-2016, James Zhan 詹波 (jfinal@126.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -17,7 +17,14 @@ package org.springblade.core.plugins.redis;
/**
* 回调用接口
* @author jfinal
*/
public interface ICallBack {
/**
* 回调方法
* @param obj
* @param <T>
* @return
*/
<T> T call(Object obj);
}
......@@ -22,13 +22,20 @@ package org.springblade.core.plugins.redis;
* 架构师可以通过实现此类制定全局性的 key 命名策略,
* 例如 Integer、String、OtherType 这些不同类型的对象
* 选择不同的命名方式,默认命名方式是 Object.toString()
* @author jfinal
*/
public interface IKeyNamingPolicy {
/**
* getKeyName
* @param key
* @return
*/
String getKeyName(Object key);
static final IKeyNamingPolicy defaultKeyNamingPolicy = new IKeyNamingPolicy() {
public String getKeyName(Object key) {
IKeyNamingPolicy defaultKeyNamingPolicy = new IKeyNamingPolicy() {
@Override
public String getKeyName(Object key) {
return key.toString();
}
};
......
......@@ -21,6 +21,7 @@ import java.util.Set;
/**
* Redis操作工具类
* @author zhuangqian
*/
public class Redis {
private static IJedis jedis = null;
......
......@@ -20,6 +20,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Redis操作工具类
* @author zhuangqian
*/
public class RedisManager {
private static Map<String, IJedis> pool = new ConcurrentHashMap<String, IJedis>();
......
......@@ -27,6 +27,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Redis插件
* @author zhuangqian
*/
public class RedisPlugin implements IPlugin {
private static Map<String, IJedis> redisCachePool = new ConcurrentHashMap<String, IJedis>();
......@@ -44,7 +45,8 @@ public class RedisPlugin implements IPlugin {
public static RedisPlugin init(){
return me;
}
@Override
public void start() {
try {
//注入redisSingle
......@@ -66,6 +68,7 @@ public class RedisPlugin implements IPlugin {
}
}
@Override
public void stop() {
for (IJedis jedis : redisCachePool.values()) {
jedis.close();
......
......@@ -18,21 +18,72 @@ package org.springblade.core.plugins.redis.serializer;
/**
* ISerializer.
* @author jfinal
*/
public interface ISerializer {
/**
* keyToBytes
* @param key
* @return
*/
byte[] keyToBytes(String key);
/**
* keyFromBytes
* @param bytes
* @return
*/
String keyFromBytes(byte[] bytes);
/**
* fieldToBytes
* @param field
* @return
*/
byte[] fieldToBytes(Object field);
/**
* fieldFromBytes
* @param bytes
* @return
*/
Object fieldFromBytes(byte[] bytes);
/**
* valueToBytes
* @param value
* @return
*/
byte[] valueToBytes(Object value);
Object valueFromBytes(byte[] bytes);
public byte[] serialize(Object value);
public Object deserialize(byte[] bytes);
/**
* valueFromBytes
* @param bytes
* @return
*/
Object valueFromBytes(byte[] bytes);
/**
* serialize
* @param value
* @return
*/
byte[] serialize(Object value);
/**
* deserialize
* @param bytes
* @return
*/
Object deserialize(byte[] bytes);
/**
* mergeBytes
* @param array1
* @param array2
* @return
*/
byte[] mergeBytes(final byte[] array1, final byte... array2);
}
......
/**
* Copyright (c) 2011-2016, James Zhan 詹波 (jfinal@126.com).
*
* <p>
* 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
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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.
......@@ -26,93 +26,110 @@ import java.io.ObjectOutputStream;
/**
* JdkSerializer.
* @author jfinal
*/
public class JdkSerializer implements ISerializer {
public static final ISerializer me = new JdkSerializer();
public byte[] keyToBytes(String key) {
return SafeEncoder.encode(key);
}
public String keyFromBytes(byte[] bytes) {
return SafeEncoder.encode(bytes);
}
public byte[] fieldToBytes(Object field) {
return serialize(field);
}
public static final ISerializer me = new JdkSerializer();
@Override
public byte[] keyToBytes(String key) {
return SafeEncoder.encode(key);
}
@Override
public String keyFromBytes(byte[] bytes) {
return SafeEncoder.encode(bytes);
}
@Override
public byte[] fieldToBytes(Object field) {
return serialize(field);
}
@Override
public Object fieldFromBytes(byte[] bytes) {
return deserialize(bytes);
return deserialize(bytes);
}
@Override
public byte[] valueToBytes(Object value) {
return serialize(value);
}
@Override
public Object valueFromBytes(byte[] bytes) {
return deserialize(bytes);
}
public byte[] valueToBytes(Object value) {
return serialize(value);
}
public Object valueFromBytes(byte[] bytes) {
return deserialize(bytes);
}
@Override
public byte[] serialize(Object value) {
if (value instanceof byte[]) {
return (byte[]) value;
}
ObjectOutputStream objectOut = null;
try {
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
objectOut = new ObjectOutputStream(bytesOut);
objectOut.writeObject(value);
objectOut.flush();
return bytesOut.toByteArray();
}
catch (Exception e) {
throw new RuntimeException(e);
}
finally {
if(objectOut != null)
try {objectOut.close();} catch (Exception e) {LogKit.error(e.getMessage(), e);}
}
if (value instanceof byte[]) {
return (byte[]) value;
}
ObjectOutputStream objectOut = null;
try {
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
objectOut = new ObjectOutputStream(bytesOut);
objectOut.writeObject(value);
objectOut.flush();
return bytesOut.toByteArray();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (objectOut != null) {
try {
objectOut.close();
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
}
}
}
}
@Override
public Object deserialize(byte[] bytes) {
if(bytes == null || bytes.length == 0)
return null;
ObjectInputStream objectInput = null;
try {
ByteArrayInputStream bytesInput = new ByteArrayInputStream(bytes);
objectInput = new ObjectInputStream(bytesInput);
return objectInput.readObject();
}
catch (Exception e) {
throw new RuntimeException(e);
}
finally {
if (objectInput != null)
try {objectInput.close();} catch (Exception e) {LogKit.error(e.getMessage(), e);}
}
if (bytes == null || bytes.length == 0) {
return null;
}
ObjectInputStream objectInput = null;
try {
ByteArrayInputStream bytesInput = new ByteArrayInputStream(bytes);
objectInput = new ObjectInputStream(bytesInput);
return objectInput.readObject();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (objectInput != null) {
try {
objectInput.close();
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
}
}
}
}
public byte[] clone(final byte[] array) {
if (array == null) {
return null;
}
return array.clone();
}
public byte[] clone(final byte[] array) {
if (array == null) {
return null;
}
return array.clone();
}
public byte[] mergeBytes(final byte[] array1, final byte... array2) {
if (array1 == null) {
return clone(array2);
} else if (array2 == null) {
return clone(array1);
}
final byte[] joinedArray = new byte[array1.length + array2.length];
System.arraycopy(array1, 0, joinedArray, 0, array1.length);
System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
return joinedArray;
}
@Override
public byte[] mergeBytes(final byte[] array1, final byte... array2) {
if (array1 == null) {
return clone(array2);
} else if (array2 == null) {
return clone(array1);
}
final byte[] joinedArray = new byte[array1.length + array2.length];
System.arraycopy(array1, 0, joinedArray, 0, array1.length);
System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
return joinedArray;
}
}
......
......@@ -15,46 +15,53 @@
*/
package org.springblade.core.shiro;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authc.DisabledAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.util.ByteSource;
import org.springblade.common.vo.ShiroUser;
import org.springblade.core.constant.ConstCache;
import org.springblade.core.constant.ConstCacheKey;
import org.springblade.core.plugins.dao.Blade;
import org.springblade.core.plugins.dao.Db;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.CMap;
import org.springblade.core.toolbox.Func;
import org.springblade.core.toolbox.support.Convert;
import org.springblade.system.model.User;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Shiro默认工厂类
* @author zhuangqian
*/
public class DefaultShiroFactory implements IShiro{
public User user(String account) {
@Override
public User user(String account) {
User user = Blade.create(User.class).findFirstBy("account = #{account}", CMap.init().set("account", account));
// 账号不存在
if (null == user) {
throw new UnknownAccountException();
}
// 账号未审核
if (user.getStatus() == 3 || user.getStatus() == 4) {
boolean notAuth = user.getStatus() == 3 || user.getStatus() == 4;
if (notAuth) {
throw new DisabledAccountException();
}
// 账号被冻结
if (user.getStatus() == 2 || user.getStatus() == 5) {
boolean frozen = user.getStatus() == 2 || user.getStatus() == 5;
if (frozen) {
throw new DisabledAccountException();
}
return user;
}
public ShiroUser shiroUser(User user) {
@Override
public ShiroUser shiroUser(User user) {
List<Integer> roleList = new ArrayList<>();
Integer[] roles = Convert.toIntArray(user.getRoleid());
for (int i = 0; i < roles.length; i++) {
......@@ -63,7 +70,8 @@ public class DefaultShiroFactory implements IShiro{
return new ShiroUser(user.getId(), user.getDeptid(), user.getAccount(), user.getName(), roleList);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Map> findPermissionsByRoleId(final Object userId, Integer roleId) {
Map<String, Object> userRole = Db.selectOneByCache(ConstCache.SYS_CACHE,
ConstCacheKey.ROLE_EXT + userId,
......@@ -95,7 +103,8 @@ public class DefaultShiroFactory implements IShiro{
return permissions;
}
@SuppressWarnings("unchecked")
@Override
@SuppressWarnings("unchecked")
public String findRoleNameByRoleId(final Integer roleId) {
Map<String, Object> map = Db.selectOneByCache(ConstCache.SYS_CACHE,
ConstCacheKey.GET_ROLE_NAME_BY_ID + roleId,
......@@ -104,7 +113,8 @@ public class DefaultShiroFactory implements IShiro{
return Func.toStr(map.get("TIPS"));
}
public SimpleAuthenticationInfo info(ShiroUser shiroUser, User user, String realmName) {
@Override
public SimpleAuthenticationInfo info(ShiroUser shiroUser, User user, String realmName) {
String credentials = user.getPassword();
// 密码加盐处理
String source = user.getSalt();
......
......@@ -15,27 +15,54 @@
*/
package org.springblade.core.shiro;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.springblade.common.vo.ShiroUser;
import org.springblade.system.model.User;
import java.util.List;
import java.util.Map;
/**
* 定义shirorealm所需数据的接口
*
* @author zhuangqian
*/
public interface IShiro {
/**
* user
* @param account
* @return
*/
User user(String account);
/**
* shiroUser
* @param user
* @return
*/
ShiroUser shiroUser(User user);
/**
* findPermissionsByRoleId
* @param userId
* @param roleId
* @return
*/
@SuppressWarnings("rawtypes")
List<Map> findPermissionsByRoleId(Object userId, Integer roleId);
/**
* findRoleNameByRoleId
* @param roleId
* @return
*/
String findRoleNameByRoleId(Integer roleId);
/**
* info
* @param shiroUser
* @param user
* @param realmName
* @return
*/
SimpleAuthenticationInfo info(ShiroUser shiroUser, User user, String realmName);
}
......@@ -15,11 +15,15 @@
*/
package org.springblade.core.shiro;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;
/**
* rest接口过滤类
* @author zhuangqian
*/
public class RestAuthorizationFilter extends AuthorizationFilter {
@Override
......
......@@ -17,6 +17,10 @@ package org.springblade.core.shiro;
import org.springblade.core.constant.Cst;
/**
* ShiroManager
* @author zhuangqian
*/
public class ShiroManager {
private static ShiroManager me = new ShiroManager();
private IShiro defaultShiroFactory = Cst.me().getDefaultShiroFactory();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册