ソースを参照

修改从session中获取examId

yin 13 時間 前
コミット
cb244d6968

+ 8 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/utils/SessionExamUtils.java

@@ -45,10 +45,17 @@ public class SessionExamUtils {
         request.removeAttribute(FORBIDDEN_SCORE_KEY);
     }
 
-    public static void setExamId(HttpServletRequest request, Exam exam) {
+    public static StmmsSession setExamId(HttpServletRequest request, Exam exam) {
         StmmsSession session = RequestUtils.getSession(request);
         session.setParameter(EXAM_ID_KEY, String.valueOf(exam.getId()));
         session.setParameter(FORBIDDEN_INFO_KEY, String.valueOf(exam.isForbiddenInfo()));
         session.setParameter(FORBIDDEN_SCORE_KEY, String.valueOf(exam.isForbiddenScore()));
+        return session;
+    }
+    public static StmmsSession setExamId(StmmsSession session, Exam exam) {
+        session.setParameter(EXAM_ID_KEY, String.valueOf(exam.getId()));
+        session.setParameter(FORBIDDEN_INFO_KEY, String.valueOf(exam.isForbiddenInfo()));
+        session.setParameter(FORBIDDEN_SCORE_KEY, String.valueOf(exam.isForbiddenScore()));
+        return session;
     }
 }

+ 4 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/SystemController.java

@@ -157,9 +157,10 @@ public class SystemController extends BaseApiController {
     @ApiOperation(value = "考试选择")
     @RequestMapping(value = "select/exam", method = RequestMethod.POST)
     @ResponseBody
-    public ResultMessage selectExam(HttpServletRequest request, @RequestParam Integer examId) {
+    public ResultMessage selectExam(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer examId) {
         Exam exam = examService.findById(examId);
-        SessionExamUtils.setExamId(request, exam);
+        StmmsSession session = SessionExamUtils.setExamId(request, exam);
+        sessionService.put(request, response, session);
         return resultOk();
     }
 
@@ -192,8 +193,8 @@ public class SystemController extends BaseApiController {
         user.setMarkerId(marker.getId());
         StmmsSession session = RequestUtils.getSession(request);
         session.saveWebUser(user);
+        session =SessionExamUtils.setExamId(session, exam);
         sessionService.put(request, response, session);
-        SessionExamUtils.setExamId(request, exam);
         return resultOk();
     }
 }

+ 22 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/interceptor/ApiInterceptor.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.api.interceptor;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.com.qmth.stmms.common.session.model.StmmsSession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +31,8 @@ import cn.com.qmth.stmms.common.signature.SignatureType;
 import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 
+import java.util.Map;
+
 /**
  * API接口访问拦截器
  *
@@ -63,6 +66,7 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
             throws Exception {
+        buildSession(request);
         HandlerMethod method = (HandlerMethod) handler;
         return validate(request, response, method.getMethodAnnotation(RoleRequire.class));
     }
@@ -166,4 +170,22 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
         return true;
     }
 
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
+            throws Exception {
+        try {
+            sessionService.put(request, response, RequestUtils.getSession(request));
+        } catch (Exception e) {
+            log.error("stmms session save faile!", e);
+        }
+    }
+
+    protected void buildSession(HttpServletRequest request) {
+        StmmsSession session = sessionService.get(request);
+        RequestUtils.setSession(request, session);
+        for (Map.Entry<String, String> entry : session.getParameters()) {
+            request.setAttribute(entry.getKey(), entry.getValue());
+        }
+    }
+
 }