|
@@ -7,7 +7,6 @@
|
|
|
|
|
|
package cn.com.qmth.examcloud.app.core.config;
|
|
|
|
|
|
-import cn.com.qmth.examcloud.app.core.exception.ApiException;
|
|
|
import cn.com.qmth.examcloud.app.model.Constants;
|
|
|
import cn.com.qmth.examcloud.app.model.LoginInfo;
|
|
|
import cn.com.qmth.examcloud.app.model.Result;
|
|
@@ -52,25 +51,29 @@ public class TokenFilter implements Filter {
|
|
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
|
|
|
throws IOException, ServletException {
|
|
|
HttpServletRequest request = (HttpServletRequest) servletRequest;
|
|
|
+ HttpServletResponse response = (HttpServletResponse) servletResponse;
|
|
|
|
|
|
//移动端设备请求必须带“设备编号”参数
|
|
|
/*String deviceId = request.getHeader(Constants.PARAM_DEVICE_ID);
|
|
|
if (StringUtils.isBlank(deviceId)) {
|
|
|
Result result = new Result().error("[APP] deviceId must be not empty.");
|
|
|
- HttpServletResponse response = (HttpServletResponse) servletResponse;
|
|
|
- this.render(response, result.toString());
|
|
|
+ this.render(response, result.toString(), true);
|
|
|
return;
|
|
|
}*/
|
|
|
|
|
|
- CustomHttpServletRequest customRequest = this.initCustomRequest(request);
|
|
|
+ Continue reqContinue = new Continue();
|
|
|
+ CustomHttpServletRequest customRequest = this.initCustomRequest(request, response, reqContinue);
|
|
|
if (customRequest != null) {
|
|
|
filterChain.doFilter(customRequest, servletResponse);
|
|
|
return;
|
|
|
}
|
|
|
- filterChain.doFilter(servletRequest, servletResponse);
|
|
|
+
|
|
|
+ if (reqContinue.yes) {
|
|
|
+ filterChain.doFilter(servletRequest, servletResponse);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- private CustomHttpServletRequest initCustomRequest(HttpServletRequest request) {
|
|
|
+ private CustomHttpServletRequest initCustomRequest(HttpServletRequest request, HttpServletResponse response, Continue reqContinue) {
|
|
|
String url = request.getServletPath();
|
|
|
if (url.contains("/user/login") || url.contains("/user/verify")) {
|
|
|
//处理登录接口
|
|
@@ -87,7 +90,9 @@ public class TokenFilter implements Filter {
|
|
|
|
|
|
boolean isDoing = userAuthService.isDoingExam(rootOrgId, accountType, account);
|
|
|
if (isDoing) {
|
|
|
- throw new ApiException("尚在考试中不允许登录!");
|
|
|
+ reqContinue.yes = false;
|
|
|
+ this.renderError(response, new Result().error("尚在考试中不允许登录!").toString());
|
|
|
+ return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -118,7 +123,9 @@ public class TokenFilter implements Filter {
|
|
|
if (loginInfo.hasExpired(PLATFORM_SESSION_EXPIRE_TIME)) {
|
|
|
boolean isDoing = userAuthService.isDoingExam(loginInfo.getRootOrgId(), loginInfo.getAccountType(), loginInfo.getAccount());
|
|
|
if (isDoing) {
|
|
|
- throw new ApiException("尚在考试中不允许登录!");
|
|
|
+ reqContinue.yes = false;
|
|
|
+ this.renderError(response, new Result().error("尚在考试中不允许登录!").toString());
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
//判断原始登录Token是否在有效时间内,否则自动登录续期
|
|
@@ -162,10 +169,14 @@ public class TokenFilter implements Filter {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- private void render(HttpServletResponse response, String json) {
|
|
|
+ private void renderError(HttpServletResponse response, String json) {
|
|
|
+ this.render(response, json, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void render(HttpServletResponse response, String json, boolean isOk) {
|
|
|
PrintWriter out = null;
|
|
|
try {
|
|
|
- response.setStatus(HttpStatus.OK.value());
|
|
|
+ response.setStatus(isOk ? HttpStatus.OK.value() : HttpStatus.INTERNAL_SERVER_ERROR.value());
|
|
|
response.setCharacterEncoding("UTF-8");
|
|
|
response.setContentType("application/json;charset=UTF-8");
|
|
|
out = response.getWriter();
|
|
@@ -183,4 +194,8 @@ public class TokenFilter implements Filter {
|
|
|
this.userAuthService = userAuthService;
|
|
|
}
|
|
|
|
|
|
+ class Continue {
|
|
|
+ boolean yes = true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|