Browse Source

线程问题处理

hejq 7 years ago
parent
commit
67daeb58fd

+ 2 - 7
src/main/java/com/uas/platform/b2b/manage/controller/AccountController.java

@@ -81,20 +81,15 @@ public class AccountController extends BaseController {
     /**
      * 退出
      *
-     * @param sessionStatus session状态
-     * @param session HttpSession
      * @return 访问路径
      * @throws IOException IO异常
      */
 	@RequestMapping(value = "/logout", method = RequestMethod.POST)
-	public ModelMap logout(SessionStatus sessionStatus, HttpSession session) throws IOException {
-        session.removeAttribute("user");
-        session.invalidate();
+	public ModelMap logout() throws IOException {
         SystemSession.clear();
-        sessionStatus.setComplete();
         User user = SystemSession.getUser();
         if (null != user) {
-            logout(sessionStatus, session);
+            logout();
         }
 		return new ModelMap("url", SecurityConstant.LOGIN_URL);
 	}

+ 13 - 0
src/main/java/com/uas/platform/b2b/manage/core/support/SystemSession.java

@@ -14,6 +14,8 @@ public class SystemSession {
 
 	private static ThreadLocal<User> local = new ThreadLocal<>();
 
+	private static User user;
+
 	private static ThreadLocal<HttpSession> localSession = new ThreadLocal<>();
 
 	public static void setUser(User session) {
@@ -21,6 +23,17 @@ public class SystemSession {
 	}
 
 	public static User getUser() {
+		// 第一次检查:若线程第一次访问,则进入if语句块;否则,若线程已经访问过,则直接返回ThreadLocal中的值
+		if (local.get() == null) {
+			synchronized (User.class) {
+				// 第二次检查:该单例是否被创建
+				if (user == null) {
+                    user = null;
+				}
+			}
+			// 将单例放入ThreadLocal中
+			local.set(user);
+		}
 		return local.get();
 	}
 

+ 0 - 14
src/main/java/com/uas/platform/b2b/manage/model/User.java

@@ -143,18 +143,4 @@ public class User implements Serializable {
         this.ip = ip;
     }
 
-    @Override
-    public String toString() {
-        return "User{" +
-                "id=" + id +
-                ", email='" + email + '\'' +
-                ", enable=" + enable +
-                ", name='" + name + '\'' +
-                ", password='" + password + '\'' +
-                ", tel='" + tel + '\'' +
-                ", fullName='" + fullName + '\'' +
-                ", role='" + role + '\'' +
-                ", ip='" + ip + '\'' +
-                '}';
-    }
 }