|
|
@@ -3,6 +3,8 @@ package com.uas.platform.b2b.filter;
|
|
|
import java.io.IOException;
|
|
|
import java.util.Collection;
|
|
|
import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
|
|
|
import javax.servlet.Filter;
|
|
|
@@ -36,15 +38,20 @@ import org.springframework.security.web.context.HttpSessionSecurityContextReposi
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
+import com.uas.platform.b2b.manage.service.AccessTokenService;
|
|
|
import com.uas.platform.b2b.model.Enterprise;
|
|
|
import com.uas.platform.b2b.model.ResourceItem;
|
|
|
import com.uas.platform.b2b.model.Role;
|
|
|
import com.uas.platform.b2b.model.SigninLog;
|
|
|
import com.uas.platform.b2b.model.User;
|
|
|
+import com.uas.platform.b2b.service.EnterpriseService;
|
|
|
+import com.uas.platform.b2b.service.RoleService;
|
|
|
import com.uas.platform.b2b.service.SigninLogService;
|
|
|
import com.uas.platform.b2b.service.UserService;
|
|
|
+import com.uas.platform.b2b.support.TrustedAuthenticationToken;
|
|
|
import com.uas.platform.b2b.support.SecurityConstant;
|
|
|
import com.uas.platform.b2b.support.SystemSession;
|
|
|
+import com.uas.platform.b2b.support.UserCreater;
|
|
|
import com.uas.platform.core.model.Constant;
|
|
|
import com.uas.platform.core.util.AgentUtils;
|
|
|
import com.uas.platform.core.util.encry.Md5Utils;
|
|
|
@@ -59,6 +66,10 @@ public class SecurityInterceptor extends AbstractSecurityInterceptor implements
|
|
|
|
|
|
private FilterInvocationSecurityMetadataSource securityMetadataSource;
|
|
|
|
|
|
+ private final static String tokenParam = "access_token";
|
|
|
+ private final static String typeParam = "client_type";
|
|
|
+ private final static String enParam = "en_uu";
|
|
|
+
|
|
|
@Autowired
|
|
|
@Qualifier("org.springframework.security.authenticationManager")
|
|
|
protected AuthenticationManager authenticationManager;
|
|
|
@@ -69,6 +80,15 @@ public class SecurityInterceptor extends AbstractSecurityInterceptor implements
|
|
|
@Autowired
|
|
|
private SigninLogService signinLogService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private AccessTokenService accessTokenService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EnterpriseService enterpriseService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RoleService roleService;
|
|
|
+
|
|
|
private final DeviceResolver deviceResolver;
|
|
|
|
|
|
public SecurityInterceptor() {
|
|
|
@@ -85,7 +105,10 @@ public class SecurityInterceptor extends AbstractSecurityInterceptor implements
|
|
|
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
|
|
HttpServletRequest httpRequest = (HttpServletRequest) request;
|
|
|
HttpServletResponse httpResponse = (HttpServletResponse) response;
|
|
|
+ // 账号密码自动登录
|
|
|
autoLogin(httpRequest);
|
|
|
+ // access_token验证登录
|
|
|
+ accessTokenLogin(httpRequest);
|
|
|
logSession(httpRequest);
|
|
|
User user = SystemSession.getUser();
|
|
|
if (user == null) {// 未登录则要求登录
|
|
|
@@ -252,6 +275,38 @@ public class SecurityInterceptor extends AbstractSecurityInterceptor implements
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * access_token验证登录
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ */
|
|
|
+ private void accessTokenLogin(HttpServletRequest request) {
|
|
|
+ if (request.getSession().getAttribute("user") == null) {
|
|
|
+ String token = request.getParameter(tokenParam);
|
|
|
+ // 发现有采用access_token方式
|
|
|
+ if (token != null) {
|
|
|
+ String type = request.getParameter(typeParam);
|
|
|
+ String enUU = request.getParameter(enParam);
|
|
|
+ if ("manage".equals(type) && enUU != null) {
|
|
|
+ Enterprise enterprise = enterpriseService.findById(Long.parseLong(enUU));
|
|
|
+ if (enterprise != null) {
|
|
|
+ Map<String, Object> data = accessTokenService.validFormManage(token);
|
|
|
+ List<Role> roles = roleService.findByEnterprise(enterprise.getUu());
|
|
|
+ // 虚拟用户
|
|
|
+ User user = UserCreater.createVirtual(String.valueOf(data.get("user")), enterprise, roles);
|
|
|
+ user.setIp(AgentUtils.getIp(request));
|
|
|
+ Collection<GrantedAuthority> array = getGrantedAuthorities(user);
|
|
|
+ TrustedAuthenticationToken authenticate = new TrustedAuthenticationToken(user.getUserUU(), array);
|
|
|
+ SecurityContextHolder.getContext().setAuthentication(authenticate);
|
|
|
+ request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
|
|
|
+ SecurityContextHolder.getContext());
|
|
|
+ request.getSession().setAttribute("user", user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void checkEnterprise(User user, String enUU) {
|
|
|
boolean choosed = false;
|
|
|
for (Enterprise enterprise : user.getEnterprises()) {
|