You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.1 KiB
80 lines
3.1 KiB
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 ${domain}.module.wsys.mgr.LogerrManager;
|
|
|
|
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:
|
|
try {
|
|
LogerrManager logerrManager = LocalData.getBean(LogerrManager.class);
|
|
logerrManager.addErr("系统错误", (String) model.get("message"), (String) model.get("trace"));
|
|
modelAndView.setViewName("500");
|
|
} catch (Exception ignored) {
|
|
|
|
}
|
|
modelAndView.setViewName("500");
|
|
break;
|
|
}
|
|
|
|
return modelAndView;
|
|
}
|
|
}
|