diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java index 8a6fec29..605e91b9 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java @@ -97,7 +97,6 @@ public class SpringBootCallable implements Callable { return true; } - /** * 生成POM.xml * @@ -213,7 +212,7 @@ public class SpringBootCallable implements Callable { ctxss.put("module", module.getName()); File m = Tool.createPath(msvr, module.getName()); for (Table table : module.getTables()) { - if (!table.getMsvr()){ + if (!table.getMsvr()) { continue; } ctxss.put("table", table); @@ -283,7 +282,10 @@ public class SpringBootCallable implements Callable { File ent = Tool.createPath(Tool.createPath(root, module.getName()), "ent"); File mpr = Tool.createPath(Tool.createPath(root, module.getName()), "mpr"); File mgr = Tool.createPath(Tool.createPath(root, module.getName()), "mgr"); - File svr = Tool.createPath(Tool.createPath(root, module.getName()), "svr"); + File svr = null; + if (project.isNeedCloud()) { + svr = Tool.createPath(Tool.createPath(root, module.getName()), "svr"); + } File req = Tool.createPath(Tool.createPath(root, module.getName()), "req"); File rsp = Tool.createPath(Tool.createPath(root, module.getName()), "rsp"); @@ -315,8 +317,10 @@ public class SpringBootCallable implements Callable { freeMarkerManager.outputTemp(Tool.createFile(mgr, Tool.ABB2Abb(table.getTableName()) + "ManagerImpl" + ".java"), "SpringBoot/java/module/mgr/managerImpl_NSYS.ftl", ctx); } - freeMarkerManager.outputTemp(Tool.createFile(svr, Tool.ABB2Abb(table.getTableName()) + "Service" + ".java"), "SpringBoot/java/module/svr/Service.java", ctx); - freeMarkerManager.outputTemp(Tool.createFile(svr, Tool.ABB2Abb(table.getTableName()) + "ServiceImpl" + ".java"), "SpringBoot/java/module/svr/ServiceImpl.java", ctx); + if (project.isNeedCloud()) { + freeMarkerManager.outputTemp(Tool.createFile(svr, Tool.ABB2Abb(table.getTableName()) + "Service" + ".java"), "SpringBoot/java/module/svr/Service.java", ctx); + freeMarkerManager.outputTemp(Tool.createFile(svr, Tool.ABB2Abb(table.getTableName()) + "ServiceImpl" + ".java"), "SpringBoot/java/module/svr/ServiceImpl.java", ctx); + } if (table.getCreate()) { freeMarkerManager.outputTemp(Tool.createFile(req, Tool.ABB2Abb(table.getTableName()) + "CreateRequest" + ".java"), "SpringBoot/java/module/req/createRequestClass.ftl", ctx); diff --git a/src/main/resources/modules/SpringBoot/java/action/GlobalController.java b/src/main/resources/modules/SpringBoot/java/action/GlobalController.java index 7a901921..1480c989 100644 --- a/src/main/resources/modules/SpringBoot/java/action/GlobalController.java +++ b/src/main/resources/modules/SpringBoot/java/action/GlobalController.java @@ -1,10 +1,31 @@ package ${domain}.action; +import ${domain}.config.ActionConfig; +import ${domain}.frame.auth.LocalData; +import ${domain}.frame.auth.Token; +import ${domain}.frame.base.BaseRequest; +import ${domain}.frame.base.BaseResponse; +import ${domain}.frame.base.ErrorType; +import ${domain}.frame.base.Screen; +import ${domain}.frame.sse.Sser; +import ${domain}.frame.utils.AESUtil; +import ${domain}.frame.utils.LogUtil; +import ${domain}.frame.utils.MD5Util; +import ${domain}.frame.utils.MapperUtil; +import ${domain}.frame.utils.RequestUtil; +import ${domain}.frame.utils.StringUtil; +import ${domain}.module.wsys.ent.Visitor; +import ${domain}.module.wsys.mgr.LogerrManager; +import ${domain}.module.wsys.mgr.TokensManager; +import ${domain}.module.wsys.mgr.VisitorManager; +import ${domain}.module.wsys.req.TokensBuildRequest; +import ${domain}.module.wsys.req.VisitorFindRequest; +import ${domain}.module.wsys.rsp.TokensBuildResponse; +import ${domain}.module.wsys.rsp.VisitorFindResponse; import com.fasterxml.jackson.core.TreeNode; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; @@ -20,45 +41,17 @@ import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.View; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; -import ${domain}.config.ActionConfig; -import ${domain}.frame.auth.LocalData; -import ${domain}.frame.auth.Token; -import ${domain}.frame.base.BaseRequest; -import ${domain}.frame.base.BaseResponse; -import ${domain}.frame.base.ErrorType; -import ${domain}.frame.base.Screen; -import ${domain}.frame.sse.Sser; -import ${domain}.frame.utils.AESUtil; -import ${domain}.frame.utils.LogUtil; -import ${domain}.frame.utils.MD5Util; -import ${domain}.frame.utils.MapperUtil; -import ${domain}.frame.utils.StringUtil; -import ${domain}.module.wsys.mgr.LogerrManager; -<#if project.frameValue() = 1> -import ${domain}.module.wsys.ent.Visitor; -import ${domain}.module.wsys.mgr.VisitorManager; -import ${domain}.module.wsys.req.VisitorFindRequest; -import ${domain}.module.wsys.req.TokensBuildRequest; -import ${domain}.module.wsys.rsp.VisitorFindResponse; -import ${domain}.module.wsys.mgr.TokensManager; -import ${domain}.module.wsys.req.TokensBuildRequest; -import ${domain}.module.wsys.rsp.TokensBuildResponse; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; -import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * 全局请求Controller,如果无特殊请求,则不需再增加其他Controller - * 全局htm后缀入口{@link GlobalController#action(Model, HttpServletRequest, HttpServletResponse)} + * 全局htm后缀入口{@link GlobalController#page(Model, HttpServletRequest, HttpServletResponse)} * 全局ajax入口{@link GlobalController#ajax(String, String, String, HttpServletRequest, HttpServletResponse, String, MultipartFile)} * 全局消息订阅{@link GlobalController#sse(String)} *

@@ -101,34 +94,26 @@ public class GlobalController { * @param request */ @RequestMapping({"/**/*.htm"}) - public String action(Model model, HttpServletRequest request, HttpServletResponse response) { + public String page(Model model, HttpServletRequest request, HttpServletResponse response) { String servletPath = request.getServletPath();// /**/*.htm String layout = "/layout/default"; - String action = LocalData.getAction();// **/* - - Pattern compile = Pattern.compile("^/(.+)\\.htm"); - Matcher matcher = compile.matcher(servletPath); - if (matcher.find()) { - action = matcher.group(1); - LocalData.setAction(action); - } + String page = RequestUtil.getPage(); try { LocaleResolver localeResolver = (LocaleResolver) request.getAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE); Locale locale = localeResolver.resolveLocale(request); {//查询screen - String[] split = action.split("/"); - layout = "screen" + File.separator + String.join(File.separator, split); + layout = "screen/" + page; View view = viewResolver.resolveViewName(layout, locale); if (view == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND,""); + response.sendError(HttpServletResponse.SC_NOT_FOUND, ""); return null; } // 尝试执行Screen执行器(服务器渲染),并返回视图模板 try { - String beanClassName = (ActionConfig.SCREEN_PREFIX + action).toLowerCase(); + String beanClassName = (ActionConfig.SCREEN_PREFIX + page).toLowerCase(); Screen screenExec = LocalData.getApplicationContext().getBean(beanClassName, Screen.class); screenExec.exec(model, request, response); @@ -142,7 +127,7 @@ public class GlobalController { } {//查找layout - String[] split = action.split("/"); + String[] split = page.split("/"); int lt = split.length; while (lt > 0) { diff --git a/src/main/resources/modules/SpringBoot/java/config/FreeMarkerConfig.java b/src/main/resources/modules/SpringBoot/java/config/FreeMarkerConfig.java index 8987393a..9d9af398 100644 --- a/src/main/resources/modules/SpringBoot/java/config/FreeMarkerConfig.java +++ b/src/main/resources/modules/SpringBoot/java/config/FreeMarkerConfig.java @@ -1,5 +1,9 @@ package ${domain}.config; +import ${domain}.frame.auth.LocalData; +import ${domain}.frame.base.Control; +import ${domain}.frame.utils.RequestUtil; +import ${domain}.frame.utils.UrlUtil; import freemarker.template.SimpleScalar; import freemarker.template.TemplateMethodModelEx; import freemarker.template.TemplateModelException; @@ -14,9 +18,6 @@ import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; -import ${domain}.frame.auth.LocalData; -import ${domain}.frame.base.Control; -import ${domain}.frame.utils.UrlUtil; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; @@ -25,8 +26,8 @@ import java.io.File; import java.util.List; import java.util.Locale; -import static ${domain}.config.ActionConfig.CONTROL_PREFIX; -import static ${domain}.config.ActionConfig.SCREEN_PREFIX; +import static com.example.config.ActionConfig.CONTROL_PREFIX; +import static com.example.config.ActionConfig.SCREEN_PREFIX; @Configuration public class FreeMarkerConfig { @@ -55,28 +56,15 @@ public class FreeMarkerConfig { try { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); LocaleResolver localeResolver = (LocaleResolver) request.getAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE); - String servletPath = LocalData.getAction(); - servletPath = servletPath.replaceAll("^/", ""); - - String[] split = servletPath.split("/"); - StringBuilder sb = new StringBuilder(""); - - // 分割组装路径 - for (int i = 0; i < split.length; i++) { - sb.append(split[i]); - if (i != split.length - 1) { - sb.append(File.separator); - } - } - + String page = RequestUtil.getPage(); Locale locale = localeResolver.resolveLocale(request); - String viewName = "screen" + File.separator + sb.toString(); + String viewName = "screen/" + page; View view = viewResolver.resolveViewName(viewName, locale); //无法找到对应screen if (view == null) { return ""; } else { - return SCREEN_PREFIX + servletPath + suffix; + return SCREEN_PREFIX + page + suffix; } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/resources/modules/SpringBoot/java/config/SecurityConfig.java b/src/main/resources/modules/SpringBoot/java/config/SecurityConfig.java index 1e302745..8dbc47a3 100644 --- a/src/main/resources/modules/SpringBoot/java/config/SecurityConfig.java +++ b/src/main/resources/modules/SpringBoot/java/config/SecurityConfig.java @@ -15,6 +15,7 @@ import org.springframework.security.web.access.intercept.FilterSecurityIntercept import ${domain}.frame.auth.LocalData; import ${domain}.frame.auth.Token; import ${domain}.frame.utils.CookieUtil; +import ${domain}.frame.utils.RequestUtil; import ${domain}.module.wsys.mgr.TokensManager; import ${domain}.module.wsys.req.TokensBuildRequest; import ${domain}.module.wsys.rsp.TokensBuildResponse; @@ -73,10 +74,16 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; + // 1优先获取参数中的token String token = request.getParameter("token"); + // 2其次获取Cookie中的token if (token == null || token.isEmpty()) { token = CookieUtil.getCookieValue(request.getCookies(), "token"); } + // 3其次获取Header中的token + if (token == null || token.isEmpty()) { + token = RequestUtil.getHeader("token"); + } // 组装Token ~ 这边根据实际的业务组装Token if (token != null) { @@ -89,14 +96,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { LocalData.setToken(null); } - // Action - String servletPath = request.getServletPath().toLowerCase(); - Pattern compile = Pattern.compile("^/(.+)\\.htm"); - Matcher matcher = compile.matcher(servletPath); - if (matcher.find()) { - LocalData.setAction(matcher.group(1)); - } - try { filterChain.doFilter(servletRequest, servletResponse); } catch (AccessDeniedException e) { diff --git a/src/main/resources/modules/SpringBoot/java/frame/auth/LocalData.java b/src/main/resources/modules/SpringBoot/java/frame/auth/LocalData.java index 7a3d2cab..2ed3bcf9 100644 --- a/src/main/resources/modules/SpringBoot/java/frame/auth/LocalData.java +++ b/src/main/resources/modules/SpringBoot/java/frame/auth/LocalData.java @@ -35,19 +35,6 @@ public class LocalData { return system; } - /** - * 当请求目标 target = '/aa/bb' - */ - private static final ThreadLocal actionHolder = new ThreadLocal(); - - public static String getAction() { - return actionHolder.get(); - } - - public static void setAction(String action) { - actionHolder.set(action); - } - /** * 当前用户的通行证 */ diff --git a/src/main/resources/modules/SpringBoot/java/frame/utils/RequestUtil.java b/src/main/resources/modules/SpringBoot/java/frame/utils/RequestUtil.java index 587a0851..a9c59d89 100644 --- a/src/main/resources/modules/SpringBoot/java/frame/utils/RequestUtil.java +++ b/src/main/resources/modules/SpringBoot/java/frame/utils/RequestUtil.java @@ -137,4 +137,20 @@ public class RequestUtil { e.printStackTrace(); } } + + public static String getHeader(String head) { + HttpServletRequest request = LocalData.getRequest(); + return request.getHeader(head); + } + + public static Pattern actionPattern = Pattern.compile("^/(.+)\\.htm"); + + public static String getPage() { + HttpServletRequest request = LocalData.getRequest(); + Matcher matcher = actionPattern.matcher(request.getServletPath()); + if (!matcher.find()) { + return ""; + } + return matcher.group(1); + } } diff --git a/src/main/resources/modules/SpringBoot/resources/static/css/base.css b/src/main/resources/modules/SpringBoot/resources/static/css/base.css index 9cf8d003..63212884 100644 --- a/src/main/resources/modules/SpringBoot/resources/static/css/base.css +++ b/src/main/resources/modules/SpringBoot/resources/static/css/base.css @@ -632,15 +632,42 @@ code { box-shadow: 0 1px 6px rgba(0, 0, 0, .2); } -.el-drawer{/* 修复抽屉无法滚动 */ +.el-drawer { /* 修复抽屉无法滚动 */ overflow: auto; height: 100%; } -.el-drawer .el-drawer__body{/* 修复抽屉内容子类继承height失效维内托 */ +.el-drawer .el-drawer__body { /* 修复抽屉内容子类继承height失效维内托 */ height: calc(100% - 76px); } +.el-transfer__button { /* 修复穿梭框2.12.0 在2.13.0后按钮异常问题*/ + display: block; + margin: 0 !important; + padding: 10px; + border-radius: 50%; + color: #fff; + background-color: #409eff; + font-size: 0; +} + +.el-transfer__button:first-child { + margin-bottom: 10px !important; +} + +.el-transfer__button.is-disabled, .el-transfer__button.is-disabled:hover { + border: 1px solid #dcdfe6; + background-color: #f5f7fa; + color: #c0c4cc; +} + +.el-transfer-panel__item { + height: 30px !important; + line-height: 30px !important; + padding-left: 15px !important; + display: block !important; +} + /* 带有固定title布局,title保持固定*/ .wb-layout-title-fix { width: 100%; @@ -686,9 +713,11 @@ code { margin: 10px; min-width: 1060px; } + .el-dialog.dialog { width: 700px; } + .el-dialog.dialog .el-form-item__content, .el-dialog.dialog .el-form-item__content > div, .el-form.form .el-form-item__content, @@ -697,13 +726,6 @@ code { .el-form.search .el-form-item__content > div { width: 200px; } -.el-transfer-panel__item { - height: 30px!important; - line-height: 30px!important; - padding-left: 15px!important; - display: block!important; -} - .el-table.data { margin-top: 10px;