架构调整

Former-commit-id: 61a8ee955519fc0beb24a123c8952a6ce970dbbb
master
王兵 4 years ago
parent 15de6527ac
commit 4db751ff65

@ -191,6 +191,7 @@ public class SpringBootCallable implements Callable {
}
freeMarkerManager.outputTemp(Tool.createFile(root, "GlobalController.java"), "SpringBoot/java/action/GlobalController.java", ctx);
freeMarkerManager.outputTemp(Tool.createFile(root, "GlobalErrorController.java"), "SpringBoot/java/action/GlobalErrorController.java", ctx);
}
public void generateConfig(File root, Project project) {

@ -4,12 +4,9 @@ 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.boot.web.servlet.error.ErrorController;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -33,7 +30,6 @@ 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;
<#if project.frameValue() = 1>
import ${domain}.module.wsys.mgr.TokensManager;
@ -58,7 +54,6 @@ import java.util.regex.Pattern;
* htm{@link GlobalController#action(Model, HttpServletRequest, HttpServletResponse)}
* ajax{@link GlobalController#ajax(String, String, String, HttpServletRequest, HttpServletResponse, String, MultipartFile)}
* {@link GlobalController#sse(String)}
* {@link GlobalController#exceptionHandler(HttpServletRequest, HttpServletResponse, Model, Exception)}
* <p>
* Request
* Api#Example#Request ==> ##Request
@ -68,8 +63,7 @@ import java.util.regex.Pattern;
* @since 2017-01-01
*/
@Controller
@ControllerAdvice
public class GlobalController implements ErrorController {
public class GlobalController {
@Value("${r'${server.servlet.context-path}'}")
private String context;
@ -80,65 +74,6 @@ public class GlobalController implements ErrorController {
@Autowired
private FreeMarkerViewResolver viewResolver;
/**
*
*
* @param request
* @param response
* @param exception
* @return
*/
@ExceptionHandler(Exception.class)
public String exceptionHandler(HttpServletRequest request, HttpServletResponse response, Model model, Exception exception) {
StringBuffer msg = new StringBuffer("");
if (exception != null) {
msg = new StringBuffer("");
String message = exception.toString();
int length = exception.getStackTrace().length;
if (length > 0) {
msg.append("<a>").append(message).append("</a><br>");
for (int i = 0; i < length; i++) {
msg.append("<a>").append(exception.getStackTrace()[i]).append("</a><br>");
}
} else {
msg.append(message);
}
}
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
model.addAttribute("msg", msg.toString());
return "500";
}
private final static String ERROR_PATH = "/error";
@Override
public String getErrorPath() {
return ERROR_PATH;
}
@RequestMapping(value = ERROR_PATH)
public String error(HttpServletRequest request, HttpServletResponse response) {
switch (response.getStatus()) {
case 404:
return "404";
case 403:
String errorUrl = RequestUtil.getErrorUrl(request);
errorUrl = errorUrl.replaceFirst(context, "");
if ((errorUrl.equals(homePage) || errorUrl.equals("/")) && LocalData.getToken() == null) {
try {
response.sendRedirect(context + loginPage);
} catch (IOException e) {
e.printStackTrace();
}
}
return "403";
case 500:
return "500";
default:
return "403";
}
}
@RequestMapping("/")
public String home() {
Token token = LocalData.getToken();
@ -230,7 +165,7 @@ public class GlobalController implements ErrorController {
}
}
} catch (Exception e) {
return exceptionHandler(request, response, model, e);
throw new RuntimeException(e);
}
// todo 可在此获取共性数据(也可以在全局拦截器GlobalHandlerInterceptor、拦截器作用域比此更高)

@ -0,0 +1,71 @@
package ${domain}.action;
import org.springframework.boot.autoconfigure.web.ErrorProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import ${domain}.frame.auth.LocalData;
import ${domain}.frame.utils.RequestUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.Map;
/**
*
*
* @author author
* @version 0.0.1
* @since 2017-01-01
*/
@Controller
public class GlobalErrorController extends BasicErrorController {
public GlobalErrorController() {
super(new DefaultErrorAttributes(), new ErrorProperties());
}
@Override
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
return super.error(request);
}
@Override
@RequestMapping(produces = "text/html")
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
HttpStatus status = this.getStatus(request);
Map<String, Object> model = Collections.unmodifiableMap(this.getErrorAttributes(request, true));
response.setStatus(status.value());
ModelAndView modelAndView = this.resolveErrorView(request, response, status, model);
if (modelAndView == null) {
modelAndView = new ModelAndView("error", model);
}
switch (status) {
case FORBIDDEN://403
String errorUrl = RequestUtil.getErrorUrl(request);
errorUrl = errorUrl.replaceFirst(LocalData.getContext(), "");
String indexPage = LocalData.getEnvironment().getProperty("web.url.index", "/index.htm");
String loginPage = LocalData.getEnvironment().getProperty("web.url.login", "/login.htm");
if ((errorUrl.equals(indexPage) || errorUrl.equals("/")) && LocalData.getToken() == null) {
RequestUtil.setRedirect(loginPage);
} else {
modelAndView.setViewName("403");
}
break;
case NOT_FOUND://404
modelAndView.setViewName("404");
break;
case INTERNAL_SERVER_ERROR://500
default:
modelAndView.setViewName("500");
break;
}
return modelAndView;
}
}

@ -97,4 +97,8 @@ public class LocalData {
String[] profiles = getEnvironment().getActiveProfiles();
return String.join(",", profiles);
}
public static String getContext() {
return getRequest().getContextPath();
}
}

@ -47,22 +47,8 @@ public class Token implements Serializable {
{// todo 开发初期收集资源,后期删除
String active = LocalData.getActive();
if (active.contains("dev")) {//测试环境捕获资源
ResFindRequest resFindRequest = new ResFindRequest();
resFindRequest.setPageSize(0);
resFindRequest.setResValue(res);
ResManager resManager = LocalData.getBean(ResManager.class);
ResFindResponse resFindResponse = resManager.find(resFindRequest, LocalData.getSysToken());
if (resFindResponse.getResult().size() == 0) {//资源不存在,主动收集资源
ResCreateRequest resCreateRequest = new ResCreateRequest();
resCreateRequest.setResCode(IDgenerator.nextUUID());
resCreateRequest.setResName("默认");
resCreateRequest.setResValue(res);
resCreateRequest.setFree(false);
resCreateRequest.setValid(true);
resCreateRequest.setResType("WEB");
resManager.create(resCreateRequest, LocalData.getSysToken());
}
resManager.saveRes(res, LocalData.getSysToken());
}
}
</#if>

@ -1,6 +1,12 @@
package ${domain}.frame.utils;
import ${domain}.frame.auth.LocalData;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* RequestUtil
@ -76,4 +82,23 @@ public class RequestUtil {
return "";
}
}
public static void setRedirect(String url) {
HttpServletResponse response = LocalData.getResponse();
try {
response.sendRedirect(url);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void setForward(String url) {
HttpServletRequest request = LocalData.getRequest();
HttpServletResponse response = LocalData.getResponse();
try {
request.getRequestDispatcher(url).forward(request, response);
} catch (ServletException | IOException e) {
e.printStackTrace();
}
}
}

@ -76,4 +76,12 @@ public interface ResManager {
* @return
*/
ResTreeResponse tree(ResTreeRequest request, Token token);
/**
*
*
* @param res
* @param token
*/
void saveRes(String res, Token token);
}

@ -6,6 +6,7 @@ import com.github.pagehelper.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ${domain}.frame.auth.LocalData;
import ${domain}.frame.auth.Token;
import ${domain}.frame.base.ErrorType;
import ${domain}.frame.base.SortType;
@ -260,4 +261,30 @@ public class ResManagerImpl implements ResManager {
response.setResult(data);
return response;
}
/**
*
*
* @param res
* @param token
*/
@Override
public void saveRes(String res, Token token) {
ResFindRequest resFindRequest = new ResFindRequest();
resFindRequest.setPageSize(0);
resFindRequest.setResValue(res);
ResManager resManager = LocalData.getBean(ResManager.class);
ResFindResponse resFindResponse = resManager.find(resFindRequest, token);
if (resFindResponse.getResult().size() == 0) {//资源不存在,主动收集资源
ResCreateRequest resCreateRequest = new ResCreateRequest();
resCreateRequest.setResCode(IDgenerator.nextUUID());
resCreateRequest.setResName("默认");
resCreateRequest.setResValue(res);
resCreateRequest.setFree(false);
resCreateRequest.setValid(true);
resCreateRequest.setResType("WEB");
resManager.create(resCreateRequest, token);
}
}
}

@ -72,11 +72,7 @@
<body>
<div class="box">
<div class="img">
<svg t="1571230949474" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
p-id="793" width="200" height="200">
<path d="M931.6 585.6v79c28.6-60.2 44.8-127.4 44.8-198.4C976.4 211 769.4 4 514.2 4S52 211 52 466.2c0 3.2 0.2 6.4 0.2 9.6l166-206h96.4L171.8 485.6h46.4v-54.8l99.2-154.6V668h-99.2v-82.4H67.6c43 161 170.6 287.4 332.4 328.6-10.4 26.2-40.6 89.4-90.8 100.6-62.2 14 168.8 3.4 333.6-104.6C769.4 873.6 873.6 784.4 930.2 668h-97.6v-82.4H666.4V476l166.2-206.2h94L786.2 485.6h46.4v-59l99.2-154v313zM366.2 608c-4.8-11.2-7.2-23.2-7.2-36V357.6c0-12.8 2.4-24.8 7.2-36 4.8-11.2 11.4-21 19.6-29.2 8.2-8.2 18-14.8 29.2-19.6 11.2-4.8 23.2-7.2 36-7.2h81.6c12.8 0 24.8 2.4 36 7.2 11 4.8 20.6 11.2 28.8 19.2l-88.6 129.4v-23c0-4.8-1.6-8.8-4.8-12-3.2-3.2-7.2-4.8-12-4.8s-8.8 1.6-12 4.8c-3.2 3.2-4.8 7.2-4.8 12v72L372.6 620c-2.4-3.8-4.6-7.8-6.4-12z m258.2-36c0 12.8-2.4 24.8-7.2 36-4.8 11.2-11.4 21-19.6 29.2-8.2 8.2-18 14.8-29.2 19.6-11.2 4.8-23.2 7.2-36 7.2h-81.6c-12.8 0-24.8-2.4-36-7.2-11.2-4.8-21-11.4-29.2-19.6-3.6-3.6-7-7.8-10-12l99.2-144.6v50.6c0 4.8 1.6 8.8 4.8 12 3.2 3.2 7.2 4.8 12 4.8s8.8-1.6 12-4.8c3.2-3.2 4.8-7.2 4.8-12v-99.6L601 296.4c6.6 7.4 12 15.8 16 25.2 4.8 11.2 7.2 23.2 7.2 36V572z"
p-id="794"></path>
</svg>
<svg t="1595154315769" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1324" width="200" height="200"><path d="M597.333333 512 426.666667 512 426.666667 426.666667 597.333333 426.666667M597.333333 682.666667 426.666667 682.666667 426.666667 597.333333 597.333333 597.333333M853.333333 341.333333 733.44 341.333333C714.24 308.053333 687.786667 279.466667 655.786667 257.706667L725.333333 188.16 665.173333 128 572.586667 220.586667C552.96 215.893333 533.333333 213.333333 512 213.333333 490.666667 213.333333 471.04 215.893333 451.84 220.586667L358.826667 128 298.666667 188.16 367.786667 257.706667C336.213333 279.466667 309.76 308.053333 290.56 341.333333L170.666667 341.333333 170.666667 426.666667 259.84 426.666667C257.706667 440.746667 256 454.826667 256 469.333333L256 512 170.666667 512 170.666667 597.333333 256 597.333333 256 640C256 654.506667 257.706667 668.586667 259.84 682.666667L170.666667 682.666667 170.666667 768 290.56 768C334.933333 844.373333 417.28 896 512 896 606.72 896 689.066667 844.373333 733.44 768L853.333333 768 853.333333 682.666667 764.16 682.666667C766.293333 668.586667 768 654.506667 768 640L768 597.333333 853.333333 597.333333 853.333333 512 768 512 768 469.333333C768 454.826667 766.293333 440.746667 764.16 426.666667L853.333333 426.666667 853.333333 341.333333Z" p-id="1325"></path></svg>
</div>
<div class="info">

Loading…
Cancel
Save

Powered by TurnKey Linux.