|
|
@@ -1,10 +1,10 @@
|
|
|
package com.uas.platform.b2bManage.web.filter;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
import com.uas.platform.b2bManage.core.support.SystemSession;
|
|
|
import com.uas.platform.b2bManage.model.User;
|
|
|
import com.uas.platform.b2bManage.service.UserService;
|
|
|
import com.uas.platform.b2bManage.support.SecurityConstant;
|
|
|
+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;
|
|
|
@@ -16,13 +16,10 @@ import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
|
|
|
|
-import javax.servlet.http.Cookie;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.IOException;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
-import java.net.URLDecoder;
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -48,7 +45,7 @@ public class SSOInterceptor extends HandlerInterceptorAdapter {
|
|
|
}
|
|
|
|
|
|
private final boolean authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
|
|
- HttpServletRequest httpRequest = (HttpServletRequest) request;
|
|
|
+ HttpServletRequest httpRequest = request;
|
|
|
logSession(httpRequest);
|
|
|
User user = SystemSession.getUser();
|
|
|
// 未登录则要求登录
|
|
|
@@ -60,7 +57,7 @@ public class SSOInterceptor extends HandlerInterceptorAdapter {
|
|
|
return true;
|
|
|
}
|
|
|
} else {
|
|
|
- onAuthenticateSuccess(request, response);
|
|
|
+ onAuthenticateSuccess(request);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
@@ -71,19 +68,10 @@ public class SSOInterceptor extends HandlerInterceptorAdapter {
|
|
|
* @param request
|
|
|
*/
|
|
|
private void logSession(HttpServletRequest request) throws UnsupportedEncodingException {
|
|
|
- //这样便可以获取一个cookie数组
|
|
|
- Cookie[] cookies = request.getCookies();
|
|
|
- if (!StringUtils.isEmpty(cookies)) {
|
|
|
- for (Cookie cookie : cookies){
|
|
|
- if (null != cookie && cookie.getName().equals("user")) {
|
|
|
- Object jsonStr = cookie.getValue();
|
|
|
- if (jsonStr != null) {
|
|
|
- String str = URLDecoder.decode(jsonStr.toString(), String.valueOf(StandardCharsets.UTF_8));
|
|
|
- User user = JSONObject.parseObject(str, User.class);
|
|
|
- SystemSession.setUser(user);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ Object user = request.getSession().getAttribute("user");
|
|
|
+ Object ip = request.getSession().getAttribute("ipAddress");
|
|
|
+ if (user != null && AgentUtils.getIp(request).equals(ip)) {
|
|
|
+ SystemSession.setUser((User) user);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -94,38 +82,13 @@ public class SSOInterceptor extends HandlerInterceptorAdapter {
|
|
|
SystemSession.clear();
|
|
|
}
|
|
|
|
|
|
- protected void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response) {
|
|
|
+ protected void onAuthenticateSuccess(HttpServletRequest request) {
|
|
|
User user = (User) request.getAttribute("user");
|
|
|
- SSOToken token = SSOHelper.attrToken(request);
|
|
|
- // cookie变化的情况下,session可能还未变化
|
|
|
- if (user == null) {
|
|
|
- user = getUserByToken(token);
|
|
|
- if (user != null) {
|
|
|
- request.setAttribute("user", user);
|
|
|
- }
|
|
|
- }
|
|
|
if (user != null) {
|
|
|
SystemSession.setUser(user);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private User getUserByToken(SSOToken token) {
|
|
|
- User authedUser = null;
|
|
|
- if (null != token && null != token.getData()) {
|
|
|
- User tokenUser = FlexJsonUtils.fromJson(token.getData(), User.class);
|
|
|
- if (!StringUtils.isEmpty(tokenUser.getTel())) {
|
|
|
- // UID表示所有系统公认的唯一标识,这里统一使用手机号
|
|
|
- authedUser = userService.findByTel(tokenUser.getTel());
|
|
|
- } else if (!StringUtils.isEmpty(tokenUser.getEmail())) {
|
|
|
- // UID表示所有系统公认的唯一标识,这里统一使用手机号
|
|
|
- authedUser = userService.findUserByUserEmail(tokenUser.getEmail());
|
|
|
- } else {
|
|
|
- log.error(String.format("invalid user %s, please set uid or dialectUID", tokenUser.getName()));
|
|
|
- }
|
|
|
- }
|
|
|
- return authedUser;
|
|
|
- }
|
|
|
-
|
|
|
private boolean onAuthenticateFailed(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
|
|
SystemSession.clear();
|
|
|
User user = (User) request.getSession().getAttribute("user");
|