|
|
@@ -2,6 +2,10 @@ package com.uas.platform.b2b.support;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.io.PrintWriter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
@@ -9,6 +13,7 @@ import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.mobile.device.Device;
|
|
|
import org.springframework.mobile.device.DeviceResolver;
|
|
|
import org.springframework.mobile.device.LiteDeviceResolver;
|
|
|
@@ -21,6 +26,7 @@ import org.springframework.security.web.savedrequest.SavedRequest;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
+import com.uas.platform.b2b.model.Enterprise;
|
|
|
import com.uas.platform.b2b.model.Role;
|
|
|
import com.uas.platform.b2b.model.SigninLog;
|
|
|
import com.uas.platform.b2b.model.User;
|
|
|
@@ -28,19 +34,22 @@ import com.uas.platform.b2b.service.SigninLogService;
|
|
|
import com.uas.platform.b2b.service.UserService;
|
|
|
import com.uas.platform.core.model.Constant;
|
|
|
import com.uas.platform.core.util.AgentUtils;
|
|
|
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
|
|
|
|
|
|
public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
|
|
|
|
|
|
@Autowired
|
|
|
private UserService userService;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
private SigninLogService signinLogService;
|
|
|
|
|
|
+ private final static String paramEN = "t_enuu";
|
|
|
+
|
|
|
private RequestCache requestCache = new HttpSessionRequestCache();
|
|
|
-
|
|
|
+
|
|
|
private final DeviceResolver deviceResolver;
|
|
|
-
|
|
|
+
|
|
|
public CustomAuthenticationSuccessHandler() {
|
|
|
this(new LiteDeviceResolver());
|
|
|
}
|
|
|
@@ -52,7 +61,22 @@ public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationS
|
|
|
@Override
|
|
|
public void onAuthenticationSuccess(final HttpServletRequest request, final HttpServletResponse response,
|
|
|
final Authentication authentication) throws ServletException, IOException {
|
|
|
- logSession(request, authentication);
|
|
|
+ User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
|
|
|
+ if (user.getEnterprises().size() > 1) {// need to choose enterprise
|
|
|
+ if (!chooseEnterprise(request, response, user)) {
|
|
|
+ response.setStatus(HttpStatus.MULTI_STATUS.value());
|
|
|
+ response.addHeader("Content-Type", "application/json; charset=utf-8");
|
|
|
+ PrintWriter printWriter = response.getWriter();
|
|
|
+ printWriter.append(FlexJsonUtils.toJsonArray(getEnterprises(user)));
|
|
|
+ printWriter.flush();
|
|
|
+ printWriter.close();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ user.setCurrentEnterprise();
|
|
|
+ }
|
|
|
+
|
|
|
+ logSession(request, user);
|
|
|
|
|
|
final SavedRequest savedRequest = requestCache.getRequest(request, response);
|
|
|
|
|
|
@@ -84,9 +108,7 @@ public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationS
|
|
|
* @param request
|
|
|
* @param authentication
|
|
|
*/
|
|
|
- private void logSession(HttpServletRequest request, Authentication authentication) {
|
|
|
- User user = userService.findUserByUserUU(Long.parseLong(authentication.getName()));
|
|
|
- user.setCurrentEnterprise();
|
|
|
+ private void logSession(HttpServletRequest request, User user) {
|
|
|
Set<Role> roles = user.getRoles();
|
|
|
if (!CollectionUtils.isEmpty(roles)) {
|
|
|
for (Role role : roles) {
|
|
|
@@ -103,7 +125,7 @@ public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationS
|
|
|
signinLogService.save(new SigninLog(user, preference, AgentUtils.getIp(request), false));
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private SitePreference getDefaultSitePreferenceForDevice(Device device) {
|
|
|
if (device == null) {
|
|
|
return null;
|
|
|
@@ -117,4 +139,36 @@ public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationS
|
|
|
return SitePreference.NORMAL;
|
|
|
}
|
|
|
|
|
|
+ private boolean chooseEnterprise(final HttpServletRequest request, final HttpServletResponse response, User user) throws IOException {
|
|
|
+ String enUU = request.getParameter(paramEN);
|
|
|
+ boolean choosed = false;
|
|
|
+ if (enUU != null) {
|
|
|
+ for (Enterprise enterprise : user.getEnterprises()) {
|
|
|
+ if (enterprise.getUu().toString().equals(enUU)) {
|
|
|
+ user.setEnterprise(enterprise);
|
|
|
+ choosed = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return choosed;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<Map<String, Object>> getEnterprises(User user) {
|
|
|
+ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
|
|
|
+ SigninLog log = signinLogService.findLast(user.getUserUU());
|
|
|
+ Long lastEn = null;
|
|
|
+ if (log != null)
|
|
|
+ lastEn = log.getEnUU();// 可以优先选中最近一次登录的企业
|
|
|
+ for (Enterprise enterprise : user.getEnterprises()) {
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ map.put("enName", enterprise.getEnName());
|
|
|
+ map.put("uu", enterprise.getUu());
|
|
|
+ if (lastEn != null && enterprise.getUu().equals(lastEn))
|
|
|
+ map.put("isLast", true);
|
|
|
+ list.add(map);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
}
|