Commit 6de32c6d authored by trumansdo's avatar trumansdo
Browse files

改变目录结构,以防止ide混合打开前端项目,导致误操作改变前端项目的格式


Signed-off-by: default avatartrumansdo <1012243881@qq.com>
parent afdf4eec
package com.ibeetl.admin.core.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ibeetl.admin.core.conf.RbacAnnotationConfig;
public class ClassLoaderUtil {
private ClassLoaderUtil(){
}
private static final Logger log = LoggerFactory.getLogger(RbacAnnotationConfig.class);
public static Class loadClass(String clsName){
Class cls = null;
try {
cls = ClassLoaderUtil.class.getClassLoader().loadClass(clsName);
} catch (ClassNotFoundException e) {
log.info(e.getMessage());
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try {
return loader.loadClass(clsName);
} catch (ClassNotFoundException e1) {
log.info(e1.getMessage());
}
}
if(cls==null){
log.error("params:{},message:{}",clsName,"无法加载类");
throw new IllegalArgumentException("不能加载"+clsName);
}
return cls;
}
}
package com.ibeetl.admin.core.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ibeetl.admin.core.conf.RbacAnnotationConfig;
public class ClassLoaderUtil {
private ClassLoaderUtil(){
}
private static final Logger log = LoggerFactory.getLogger(RbacAnnotationConfig.class);
public static Class loadClass(String clsName){
Class cls = null;
try {
cls = ClassLoaderUtil.class.getClassLoader().loadClass(clsName);
} catch (ClassNotFoundException e) {
log.info(e.getMessage());
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try {
return loader.loadClass(clsName);
} catch (ClassNotFoundException e1) {
log.info(e1.getMessage());
}
}
if(cls==null){
log.error("params:{},message:{}",clsName,"无法加载类");
throw new IllegalArgumentException("不能加载"+clsName);
}
return cls;
}
}
package com.ibeetl.admin.core.util;
import java.util.ArrayList;
import java.util.List;
import org.springframework.validation.FieldError;
public class FormFieldException extends PlatformException {
List<FieldError> errors = new ArrayList<FieldError>();
public FormFieldException() {
super();
}
public FormFieldException(String objectName,String field,String error) {
super("field "+field+" "+error);
FieldError fields = new FieldError(objectName,field,error);
errors.add(fields);
}
public List<FieldError> getErrors() {
return errors;
}
public void setErrors(List<FieldError> errors) {
this.errors = errors;
}
}
package com.ibeetl.admin.core.util;
import java.util.ArrayList;
import java.util.List;
import org.springframework.validation.FieldError;
public class FormFieldException extends PlatformException {
List<FieldError> errors = new ArrayList<FieldError>();
public FormFieldException() {
super();
}
public FormFieldException(String objectName,String field,String error) {
super("field "+field+" "+error);
FieldError fields = new FieldError(objectName,field,error);
errors.add(fields);
}
public List<FieldError> getErrors() {
return errors;
}
public void setErrors(List<FieldError> errors) {
this.errors = errors;
}
}
package com.ibeetl.admin.core.util;
import javax.servlet.http.HttpSession;
/**
* 用户Controller对应的功能
* {@link MVCConf}
* @author lijiazhi
*
*/
public class FunctionLocal {
private FunctionLocal(){
}
private static final ThreadLocal<String> sessions =
new ThreadLocal<String>() {
@Override protected String initialValue() {
return null;
}
};
public static String get(){
return sessions.get();
}
public static void set(String session){
sessions.set(session);
}
}
package com.ibeetl.admin.core.util;
import javax.servlet.http.HttpSession;
/**
* 用户Controller对应的功能
* {@link MVCConf}
* @author lijiazhi
*
*/
public class FunctionLocal {
private FunctionLocal(){
}
private static final ThreadLocal<String> sessions =
new ThreadLocal<String>() {
@Override protected String initialValue() {
return null;
}
};
public static String get(){
return sessions.get();
}
public static void set(String session){
sessions.set(session);
}
}
package com.ibeetl.admin.core.util;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.conf.MVCConf;
/**
* 保留用户会话,以方便在业务代码任何地方调用
* {@link MVCConf}
* @author lijiazhi
*
*/
@Component
public class HttpRequestLocal {
public HttpRequestLocal(){
}
private static final ThreadLocal<HttpServletRequest> requests =
new ThreadLocal<HttpServletRequest>() {
@Override protected HttpServletRequest initialValue() {
return null;
}
};
public Object getSessionValue(String attr){
return requests.get().getSession().getAttribute(attr);
}
public void setSessionValue(String attr,Object obj){
requests.get().getSession().setAttribute(attr,obj);
}
public Object getRequestValue(String attr){
return requests.get().getAttribute(attr);
}
public String getRequestURI(){
return requests.get().getRequestURI();
}
public String getRequestIP(){
return getIpAddr(requests.get());
}
public void set(HttpServletRequest request){
requests.set(request);
}
/**
* 获取当前网络ip
* @param request
* @return
*/
public String getIpAddr(HttpServletRequest request){
String ipAddress = request.getHeader("x-forwarded-for");
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress= inet.getHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}
return ipAddress;
}
}
package com.ibeetl.admin.core.util;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.conf.MVCConf;
/**
* 保留用户会话,以方便在业务代码任何地方调用
* {@link MVCConf}
* @author lijiazhi
*
*/
@Component
public class HttpRequestLocal {
public HttpRequestLocal(){
}
private static final ThreadLocal<HttpServletRequest> requests =
new ThreadLocal<HttpServletRequest>() {
@Override protected HttpServletRequest initialValue() {
return null;
}
};
public Object getSessionValue(String attr){
return requests.get().getSession().getAttribute(attr);
}
public void setSessionValue(String attr,Object obj){
requests.get().getSession().setAttribute(attr,obj);
}
public Object getRequestValue(String attr){
return requests.get().getAttribute(attr);
}
public String getRequestURI(){
return requests.get().getRequestURI();
}
public String getRequestIP(){
return getIpAddr(requests.get());
}
public void set(HttpServletRequest request){
requests.set(request);
}
/**
* 获取当前网络ip
* @param request
* @return
*/
public String getIpAddr(HttpServletRequest request){
String ipAddress = request.getHeader("x-forwarded-for");
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress= inet.getHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}
return ipAddress;
}
}
package com.ibeetl.admin.core.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.ibeetl.admin.core.entity.CoreMenu;
import com.ibeetl.admin.core.rbac.tree.MenuItem;
public class MenuBuildUtil {
private MenuBuildUtil() {
}
public static MenuItem buildMenuTree(List<CoreMenu> list) {
CoreMenu root = new CoreMenu();
root.setId(0L);
root.setType("");
root.setName("主菜单");
MenuItem rootMenu = new MenuItem(root);
buildTreeNode(rootMenu, list);
return rootMenu;
}
private static void buildTreeNode(MenuItem parent, List<CoreMenu> list) {
if (parent.getData().getType().equals(CoreMenu.TYPE_MENUITEM)) {
return;
}
long id = parent.getId();
List<CoreMenu> dels = new ArrayList<>();
for (CoreMenu sysMenu : list) {
if (sysMenu.getParentMenuId() == id) {
MenuItem item = new MenuItem(sysMenu);
item.setParent(parent);
dels.add(sysMenu);
}
}
list.removeAll(dels);
if (list.isEmpty()) {
return;
}
sortMenu(parent.getChildren());
for (MenuItem child : parent.getChildren()) {
buildTreeNode(child, list);
}
}
private static void sortMenu(List<MenuItem> children) {
Collections.sort(children, new Comparator<MenuItem>() {
@Override
public int compare(MenuItem o1, MenuItem o2) {
return o1.getSeq().compareTo(o2.getSeq());
}
});
}
}
package com.ibeetl.admin.core.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.ibeetl.admin.core.entity.CoreMenu;
import com.ibeetl.admin.core.rbac.tree.MenuItem;
public class MenuBuildUtil {
private MenuBuildUtil() {
}
public static MenuItem buildMenuTree(List<CoreMenu> list) {
CoreMenu root = new CoreMenu();
root.setId(0L);
root.setType("");
root.setName("主菜单");
MenuItem rootMenu = new MenuItem(root);
buildTreeNode(rootMenu, list);
return rootMenu;
}
private static void buildTreeNode(MenuItem parent, List<CoreMenu> list) {
if (parent.getData().getType().equals(CoreMenu.TYPE_MENUITEM)) {
return;
}
long id = parent.getId();
List<CoreMenu> dels = new ArrayList<>();
for (CoreMenu sysMenu : list) {
if (sysMenu.getParentMenuId() == id) {
MenuItem item = new MenuItem(sysMenu);
item.setParent(parent);
dels.add(sysMenu);
}
}
list.removeAll(dels);
if (list.isEmpty()) {
return;
}
sortMenu(parent.getChildren());
for (MenuItem child : parent.getChildren()) {
buildTreeNode(child, list);
}
}
private static void sortMenu(List<MenuItem> children) {
Collections.sort(children, new Comparator<MenuItem>() {
@Override
public int compare(MenuItem o1, MenuItem o2) {
return o1.getSeq().compareTo(o2.getSeq());
}
});
}
}
package com.ibeetl.admin.core.util;
public class PlatformException extends RuntimeException {
public PlatformException() {
super();
}
public PlatformException(String message) {
super(message);
}
public PlatformException(String message, Throwable e){
super(message,e);
}
}
package com.ibeetl.admin.core.util;
public class PlatformException extends RuntimeException {
public PlatformException() {
super();
}
public PlatformException(String message) {
super(message);
}
public PlatformException(String message, Throwable e){
super(message,e);
}
}
package com.ibeetl.admin.core.util.beetl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.beetl.core.Context;
import org.beetl.core.Function;
import org.beetl.sql.core.engine.SQLParameter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreRoleFunction;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessFactory;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.service.CorePlatformService;
import com.ibeetl.admin.core.util.FunctionLocal;
/**
* 数据权限拼sql,配合DataAccessFactory
* @author lijiazhi
*
*/
@Component
public class DataAccessFunction implements Function {
Log log = LogFactory.getLog(DataAccessFunction.class);
@Autowired
CorePlatformService platFormService;
@Autowired
DataAccessFactory dataAccessFactory;
private static Map defaultTargets = new HashMap();
static{
//数据库默认的跟组织和用户相关字段
defaultTargets.put("org", "org_id");
defaultTargets.put("user", "user_id");
}
private static final String SQL_MY_DATA = "user_id=? ";
private static final String SQL_MY_ORG_DATA = "org_id=? ";
public Object call(Object[] paras, Context ctx){
//项目初期,总是返回1==1,避免数据权限带来的麻烦
CoreUser user = platFormService.getCurrentUser();
//{"org":"org_id","user","user_id"}
Map targets = this.defaultTargets;
//用户调用conroller 结果"user.view"
String functionCode = FunctionLocal.get();
if(paras.length==1){
Object o = paras[0];
if(o instanceof String){
functionCode = (String)o;
}else if(o instanceof Map){
targets = (Map)paras[1];
}
}else if(paras.length==2){
functionCode = (String)paras[0];
targets = (Map)paras[1];
}
if(platFormService.isSupperAdmin(user)){
return " 1=1 /* admin */ ";
}
Long currentOrgId = platFormService.getCurrentOrgId();
List<CoreRoleFunction> roleFuns = platFormService.getRoleFunction(user.getId(),currentOrgId,functionCode);
if(roleFuns.isEmpty()){
//如果没有配置数据权限,是1=1,因此为角色指定功能的时候,需要设定数据权限,否则查询到所有数据
return "1=1 /* empty data access */ ";
}
List<Object> list = (List<Object>)ctx.getGlobal("_paras");
StringBuilder sb = new StringBuilder("( ");
//数据权限范围划定
boolean hasAppend = false;
for(int i=0;i<roleFuns.size();i++){
CoreRoleFunction fun = roleFuns.get(i);
Integer accessType = fun.getDataAccessType();
if(accessType==null){
continue;
}
if(hasAppend){
sb.append(" or ");
}
hasAppend = true;
DataAccess data = dataAccessFactory.getDataAccess(accessType);
DataAccessResullt ret = data.getOrg(user.getId(), currentOrgId);
switch(ret.getStatus()){
case NoneOrg:{
sb.append(targets.get("org")+" in (-1) ");
break;
}
case AllOrg:{
//sql 不包含组织机构过滤信息
sb.append(" 1=1 /* AllOrg */ ");
break;
}
case OnlyUser:{
List<Long> ids = ret.getUserIds();
sb.append(targets.get("user"));
if(ids.size()==0){
sb.append("=-1/*指定用户,但没有候选用户*/");
continue;
}
if(ids.size()==1){
sb.append(" =? ");
list.add(new SQLParameter(ids.get(0)));
continue;
}
sb.append(" in (");
for(int z=0;z<ids.size();z++){
sb.append(" ? ");
list.add(new SQLParameter(ids.get(z)));
if(z!=ids.size()-1){
sb.append(",");
}
}
sb.append(") ");
break;
}
case OnlyOrg:{
List<Long> ids = ret.getOrgIds();
sb.append(targets.get("org"));
if(ids.size()==0){
sb.append("=-1/*指定机构,但没有候选机构*/");
continue;
}
if(ids.size()==1){
sb.append(" =? ");
list.add(new SQLParameter(ids.get(0)));
continue;
}
sb.append(" in (");
for(int z=0;z<ids.size();z++){
sb.append("?");
list.add(new SQLParameter(ids.get(z)));
if(z!=ids.size()-1){
sb.append(",");
}
}
sb.append(") ");
break;
}
default:{
log.warn("错误的"+ret.getStatus().toString());
throw new UnsupportedOperationException(ret.getStatus().toString());
}
}
}
sb.append(" ) ");
return sb.toString();
}
}
package com.ibeetl.admin.core.util.beetl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.beetl.core.Context;
import org.beetl.core.Function;
import org.beetl.sql.core.engine.SQLParameter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreRoleFunction;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessFactory;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.service.CorePlatformService;
import com.ibeetl.admin.core.util.FunctionLocal;
/**
* 数据权限拼sql,配合DataAccessFactory
* @author lijiazhi
*
*/
@Component
public class DataAccessFunction implements Function {
Log log = LogFactory.getLog(DataAccessFunction.class);
@Autowired
CorePlatformService platFormService;
@Autowired
DataAccessFactory dataAccessFactory;
private static Map defaultTargets = new HashMap();
static{
//数据库默认的跟组织和用户相关字段
defaultTargets.put("org", "org_id");
defaultTargets.put("user", "user_id");
}
private static final String SQL_MY_DATA = "user_id=? ";
private static final String SQL_MY_ORG_DATA = "org_id=? ";
public Object call(Object[] paras, Context ctx){
//项目初期,总是返回1==1,避免数据权限带来的麻烦
CoreUser user = platFormService.getCurrentUser();
//{"org":"org_id","user","user_id"}
Map targets = this.defaultTargets;
//用户调用conroller 结果"user.view"
String functionCode = FunctionLocal.get();
if(paras.length==1){
Object o = paras[0];
if(o instanceof String){
functionCode = (String)o;
}else if(o instanceof Map){
targets = (Map)paras[1];
}
}else if(paras.length==2){
functionCode = (String)paras[0];
targets = (Map)paras[1];
}
if(platFormService.isSupperAdmin(user)){
return " 1=1 /* admin */ ";
}
Long currentOrgId = platFormService.getCurrentOrgId();
List<CoreRoleFunction> roleFuns = platFormService.getRoleFunction(user.getId(),currentOrgId,functionCode);
if(roleFuns.isEmpty()){
//如果没有配置数据权限,是1=1,因此为角色指定功能的时候,需要设定数据权限,否则查询到所有数据
return "1=1 /* empty data access */ ";
}
List<Object> list = (List<Object>)ctx.getGlobal("_paras");
StringBuilder sb = new StringBuilder("( ");
//数据权限范围划定
boolean hasAppend = false;
for(int i=0;i<roleFuns.size();i++){
CoreRoleFunction fun = roleFuns.get(i);
Integer accessType = fun.getDataAccessType();
if(accessType==null){
continue;
}
if(hasAppend){
sb.append(" or ");
}
hasAppend = true;
DataAccess data = dataAccessFactory.getDataAccess(accessType);
DataAccessResullt ret = data.getOrg(user.getId(), currentOrgId);
switch(ret.getStatus()){
case NoneOrg:{
sb.append(targets.get("org")+" in (-1) ");
break;
}
case AllOrg:{
//sql 不包含组织机构过滤信息
sb.append(" 1=1 /* AllOrg */ ");
break;
}
case OnlyUser:{
List<Long> ids = ret.getUserIds();
sb.append(targets.get("user"));
if(ids.size()==0){
sb.append("=-1/*指定用户,但没有候选用户*/");
continue;
}
if(ids.size()==1){
sb.append(" =? ");
list.add(new SQLParameter(ids.get(0)));
continue;
}
sb.append(" in (");
for(int z=0;z<ids.size();z++){
sb.append(" ? ");
list.add(new SQLParameter(ids.get(z)));
if(z!=ids.size()-1){
sb.append(",");
}
}
sb.append(") ");
break;
}
case OnlyOrg:{
List<Long> ids = ret.getOrgIds();
sb.append(targets.get("org"));
if(ids.size()==0){
sb.append("=-1/*指定机构,但没有候选机构*/");
continue;
}
if(ids.size()==1){
sb.append(" =? ");
list.add(new SQLParameter(ids.get(0)));
continue;
}
sb.append(" in (");
for(int z=0;z<ids.size();z++){
sb.append("?");
list.add(new SQLParameter(ids.get(z)));
if(z!=ids.size()-1){
sb.append(",");
}
}
sb.append(") ");
break;
}
default:{
log.warn("错误的"+ret.getStatus().toString());
throw new UnsupportedOperationException(ret.getStatus().toString());
}
}
}
sb.append(" ) ");
return sb.toString();
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment