diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java
index a77fbbd9..d4b52e36 100644
--- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java
+++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/FormAuthenticationFilter.java
@@ -240,11 +240,11 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.
protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) {
String className = e.getClass().getName(), message = "";
if (IncorrectCredentialsException.class.getName().equals(className) || UnknownAccountException.class.getName().equals(className)) {
- message = "账号或密码错误, 请重试.";
+ message = Global.getText("sys.login.failure");
} else if (e.getMessage() != null && StringUtils.startsWith(e.getMessage(), "msg:")) {
message = StringUtils.replace(e.getMessage(), "msg:", "");
} else {
- message = "对不起,系统遇见了点问题,请稍后再试!";
+ message = Global.getText("sys.login.error");
logger.error(message, e); // 输出到日志文件
}
request.setAttribute(getFailureKeyAttribute(), className);
diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java
index 4fd9c932..9abfc69b 100644
--- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java
+++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java
@@ -37,7 +37,8 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter
//try/catch added for SHIRO-298:
try {
// 记录用户退出日志
- LogUtils.saveLog(UserUtils.getUser(), ServletUtils.getRequest(), "系统退出", Log.TYPE_LOGIN_LOGOUT);
+ LogUtils.saveLog(UserUtils.getUser(), ServletUtils.getRequest(),
+ "系统退出", Log.TYPE_LOGIN_LOGOUT);
// 退出登录
subject.logout();
} catch (SessionException ise) {
@@ -46,7 +47,8 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter
// 如果是Ajax请求,返回Json字符串。
if (ServletUtils.isAjaxRequest((HttpServletRequest)request)){
- ServletUtils.renderResult((HttpServletResponse)response, Global.TRUE, "退出成功!");
+ ServletUtils.renderResult((HttpServletResponse)response,
+ Global.TRUE, Global.getText("sys.logout.success"));
return false;
}
diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java
index 9e7a12a0..8d07130e 100644
--- a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java
+++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java
@@ -104,7 +104,7 @@ public class LoginController extends BaseController{
// 如果是Ajax请求,返回Json字符串。
if (ServletUtils.isAjaxRequest((HttpServletRequest)request)){
model.addAttribute("result", "login");
- model.addAttribute("message", text("未登录或登录超时。请重新登录,谢谢!"));
+ model.addAttribute("message", text("sys.login.notLongIn"));
return ServletUtils.renderObject(response, model);
}
@@ -255,9 +255,9 @@ public class LoginController extends BaseController{
if (loginInfo.getParam("lang") != null){
Global.setLang(loginInfo.getParam("lang"), request, response);
}
- model.addAttribute("message", text("登录成功!"));
+ model.addAttribute("message", text("sys.login.success"));
}else{
- model.addAttribute("message", text("获取信息成功!"));
+ model.addAttribute("message", text("sys.login.getInfo"));
}
model.addAttribute("sessionid", (String)session.getId());
diff --git a/modules/core/src/main/resources/i18n/core/i18n_en.properties b/modules/core/src/main/resources/i18n/core/i18n_en.properties
new file mode 100644
index 00000000..4817e3f3
--- /dev/null
+++ b/modules/core/src/main/resources/i18n/core/i18n_en.properties
@@ -0,0 +1,27 @@
+
+sys.login.notLongIn=No login or login timeout.Please login again, thank you!
+sys.login.success=Login successful!
+sys.login.getInfo=Get info successful!
+sys.login.failure=Account or password error, please try again.
+sys.login.error=Sorry, system error. Please try again later.
+sys.logout.success=Logout successful!
+
+sys.error.400.title=Request parameter error
+sys.error.400.message=Request parameter error, server cannot parse.
+sys.error.403.title=Insufficient permissions
+sys.error.403.message=Your permissions are not sufficient!
+sys.error.404.title=Page doesn't exist
+sys.error.404.message=The page you visited does not exist!
+sys.error.500.title=Internal system error
+sys.error.500.message=The page you visited error!
+sys.error.returnButton=Previous page
+
+# #### 学习、举例 #### #
+
+#没有参数=No parameters
+#有\ {0}\ 个参数= There are {0} parameters
+
+# #### 测试视图写法 #### #
+
+# ${text('没有参数')}
+# ${text('有\ {0}\ 个参数', 3)}
diff --git a/modules/core/src/main/resources/i18n/core/i18n_zh_CN.properties b/modules/core/src/main/resources/i18n/core/i18n_zh_CN.properties
new file mode 100644
index 00000000..8395444b
--- /dev/null
+++ b/modules/core/src/main/resources/i18n/core/i18n_zh_CN.properties
@@ -0,0 +1,17 @@
+
+sys.login.notLongIn=未登录或登录超时。请重新登录,谢谢!
+sys.login.success=登录成功!
+sys.login.getInfo=获取信息成功!
+sys.login.failure=账号或密码错误,请重试。
+sys.login.error=对不起,系统遇见了点问题,请稍后再试!
+sys.logout.success=退出成功!
+
+sys.error.400.title=请求参数错误
+sys.error.400.message=请求参数错误,服务器无法解析。
+sys.error.403.title=操作权限不足
+sys.error.403.message=您的操作权限不足!
+sys.error.404.title=页面不存在
+sys.error.404.message=您访问的页面不存在!
+sys.error.500.title=系统内部错误
+sys.error.500.message=您访问的页面出错啦!
+sys.error.returnButton=返回上一页
diff --git a/modules/core/src/main/resources/i18n/sys/i18n_en.properties b/modules/core/src/main/resources/i18n/sys/i18n_en.properties
deleted file mode 100644
index 66b0ab29..00000000
--- a/modules/core/src/main/resources/i18n/sys/i18n_en.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-没有参数=No parameters
-有\ {0}\ 个参数= There are {0} parameters
-
-
-# 测试视图写法
-
-# ${text('没有参数')}
-# ${text('有\ {0}\ 个参数', 3)}
diff --git a/modules/core/src/main/resources/i18n/sys/i18n_zh_CN.properties b/modules/core/src/main/resources/i18n/sys/i18n_zh_CN.properties
deleted file mode 100644
index e69de29b..00000000
diff --git a/modules/core/src/main/resources/views/error/400.html b/modules/core/src/main/resources/views/error/400.html
new file mode 100644
index 00000000..cc690d3d
--- /dev/null
+++ b/modules/core/src/main/resources/views/error/400.html
@@ -0,0 +1,57 @@
+<%
+@servlet.getResponse().setStatus(403);
+
+var message = @ObjectUtils.toString(@request.getAttribute('message'));
+
+if (isBlank(message)){
+ var ex = @ExceptionUtils.getThrowable(request);
+ if (ex != null){
+ if(@StringUtils.startsWith(@ex.getMessage(), 'msg:')){
+ message = @StringUtils.replace(@ex.getMessage(), 'msg:', '');
+ }else if (ex.class.name == 'org.springframework.validation.BindException'){
+ for (var e in ex.globalErrors){
+ message = message + '☆' + e.defaultMessage + '(' + e.objectName + ')
';
+ }
+ for (var e in ex.fieldErrors){
+ message = message + '☆' + e.defaultMessage + '(' + e.field + ')
';
+ }
+ }else if (ex.class.name == 'javax.validation.ConstraintViolationException'){
+ for (var v in ex.constraintViolations) {
+ message = message + '☆' + v.message + '(' + v.propertyPath + ')
';
+ }
+ }else{
+ message = message + ex.message;
+ }
+ @org.slf4j.LoggerFactory.getLogger('error/400').info(ex.message, ex);
+ }
+}
+
+if (isBlank(message)){
+ message = text('sys.error.400.message');
+}
+
+// 如果是异步请求或是手机端,则直接返回信息
+if (@ServletUtils.isAjaxRequest(request)) {
+ print(message);
+}
+
+// 输出异常信息页面
+else {
+%>
+<% layout('/layouts/default.html', {title: '400 - '+text('sys.error.400.title')}){ %>
+
+
${message}
+ +很抱歉,您没有权限访问此页面,若有疑问请联系管理员。
+ class="fa fa-reply-all"> ${text('sys.error.returnButton')}对不起,你访问的页面出现了一点问题,请及时联系管理员解决!
+ class="fa fa-reply-all"> ${text('sys.error.returnButton')}