|
|
@@ -1,7 +1,17 @@
|
|
|
package com.uas.platform.b2c.core.filter;
|
|
|
|
|
|
+import com.uas.platform.b2c.common.account.model.Enterprise;
|
|
|
import com.uas.platform.b2c.common.account.model.User;
|
|
|
+import com.uas.platform.b2c.common.account.service.UserService;
|
|
|
import com.uas.platform.b2c.core.support.SystemSession;
|
|
|
+import com.uas.platform.core.util.AgentUtils;
|
|
|
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
|
|
|
+import com.uas.sso.SSOHelper;
|
|
|
+import com.uas.sso.SSOToken;
|
|
|
+import com.uas.sso.entity.UserAccount;
|
|
|
+import org.apache.log4j.Logger;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
@@ -13,16 +23,59 @@ import javax.servlet.http.HttpSession;
|
|
|
*/
|
|
|
public class SystemSessionInterceptor extends HandlerInterceptorAdapter {
|
|
|
|
|
|
+ private static final Logger logger = Logger.getLogger(SystemSessionInterceptor.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
+
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
if (SystemSession.getUser() == null) {
|
|
|
- HttpSession session = request.getSession(false);
|
|
|
- if (session != null && session.getAttribute("user") != null) {
|
|
|
- SystemSession.setUser((User) session.getAttribute("user"));
|
|
|
+ SSOToken token = (SSOToken)SSOHelper.getToken(request);
|
|
|
+ User user = getUserByToken(token);
|
|
|
+ if (user != null) {
|
|
|
+ user.setIp(AgentUtils.getIp(request));
|
|
|
+ SystemSession.setUser(user);
|
|
|
}
|
|
|
+ HttpSession session = request.getSession(false);
|
|
|
+// if (session != null && session.getAttribute("user") != null) {
|
|
|
+// SystemSession.setUser((User) session.getAttribute("user"));
|
|
|
+// }
|
|
|
SystemSession.setSession(session);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private User getUserByToken(SSOToken token) {
|
|
|
+ User authedUser = null;
|
|
|
+ if (token.getData() != null) {
|
|
|
+ UserAccount tokenUser = FlexJsonUtils.fromJson(token.getData(), UserAccount.class);
|
|
|
+ if (!StringUtils.isEmpty(tokenUser.getUserUU())) {
|
|
|
+ // dialectUID表示client系统自己的唯一标识,比如user_uu,手机号没设置的情况下使用
|
|
|
+ authedUser = userService.findUserByUserUU(tokenUser.getUserUU());
|
|
|
+ } else if (!StringUtils.isEmpty(tokenUser.getMobile())) {
|
|
|
+ // UID表示所有系统公认的唯一标识,这里统一使用手机号
|
|
|
+ authedUser = userService.findUserByUserTel(tokenUser.getMobile());
|
|
|
+ } else {
|
|
|
+ logger.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getVipName()));
|
|
|
+ }
|
|
|
+ if (authedUser != null && authedUser.getEnterprises() != null) {
|
|
|
+ // 企业资料在client系统自己的唯一标识,比如en_uu
|
|
|
+ if (tokenUser.getSpaceUU() != null) {
|
|
|
+ authedUser.setCurrentEnterprise(tokenUser.getSpaceUU());
|
|
|
+ } else if (tokenUser.getBusinessCode() != null) {
|
|
|
+ for (Enterprise enterprise : authedUser.getEnterprises()) {
|
|
|
+ // 企业资料在所有系统公认的唯一标识,这里使用商业登记证号
|
|
|
+ if (tokenUser.getBusinessCode().equals(enterprise.getEnBussinessCode())) {
|
|
|
+ authedUser.setEnterprise(enterprise);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return authedUser;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|