diff --git a/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java b/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java new file mode 100644 index 000000000..d6e911fae --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/config/MyBatisConfiguration.java @@ -0,0 +1,23 @@ +package com.iformall.config; + +import com.iformall.plugin.MultiTenancy; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +@Configuration +public class MyBatisConfiguration { + + @Bean + public MultiTenancy multiTenancy() { + MultiTenancy multiTenancy = new MultiTenancy(); + Properties properties = new Properties(); + properties.setProperty("tenantIdColumn", "tenant_id"); + properties.setProperty("dialect", "mysql"); + properties.setProperty("tenantInfo", "com.iformall.tenant.TenantInfoImpl"); + multiTenancy.setProperties(properties); + return multiTenancy; + } +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java b/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java index e586879a0..6a361559b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java @@ -41,7 +41,7 @@ public class BaseController { } public String getTenantId(){ - MallUserInfo user = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - return user.getTenantId(); + String tenantId = (String)SecurityUtils.getSubject().getSession().getAttribute(UserSession.tenantId); + return tenantId; } } diff --git a/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java b/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java index d9780c9b2..5dbce7a98 100644 --- a/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java +++ b/mallinkAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java @@ -3,6 +3,7 @@ package com.iformall.shiro; import javax.annotation.Resource; import com.iformall.service.MallUserInfoService; +import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; @@ -18,6 +19,7 @@ import org.apache.shiro.util.ByteSource; import com.iformall.domain.po.MallUserInfo; import com.iformall.service.MallPermissionService; +import org.springframework.boot.autoconfigure.security.SecurityProperties; /** * Created by yangqj on 2017/4/21. @@ -68,6 +70,7 @@ public class MyShiroRealm extends AuthorizingRealm { Session session = SecurityUtils.getSubject().getSession(); session.setAttribute(UserSession.userInfo, user); session.setAttribute(UserSession.userId, user.getId()); + session.setAttribute(UserSession.tenantId, user.getTenantId()); return authenticationInfo; } diff --git a/mallinkAdmin/src/main/java/com/iformall/shiro/UserSession.java b/mallinkAdmin/src/main/java/com/iformall/shiro/UserSession.java index e89a84cd0..02a7aca87 100644 --- a/mallinkAdmin/src/main/java/com/iformall/shiro/UserSession.java +++ b/mallinkAdmin/src/main/java/com/iformall/shiro/UserSession.java @@ -6,4 +6,6 @@ public class UserSession { public static String userId ="userSessionId"; + public static String tenantId ="TENANT_ID"; + } diff --git a/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java new file mode 100644 index 000000000..cc37581cc --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/tenant/TenantInfoImpl.java @@ -0,0 +1,74 @@ +package com.iformall.tenant; + +import com.iformall.plugin.TenantInfo; +import com.iformall.shiro.UserSession; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.session.InvalidSessionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TenantInfoImpl implements TenantInfo { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public String getTenantId() { + String tenantId = ""; + try { + tenantId = (String) SecurityUtils.getSubject().getSession().getAttribute(UserSession.tenantId); + } catch (InvalidSessionException e) { + logger.error(e.getMessage()); + } + return tenantId; + } + + @Override + public boolean doTableFilter(String tableName) { + if ("mall_permission".equals(tableName)) { + return true; + } + if ("mall_user_role".equals(tableName)) { + return true; + } + if ("wx_channel".equals(tableName)) { + return true; + } + if ("wx_business".equals(tableName)) { + return true; + } + if ("wx_coupon_type".equals(tableName)) { + return true; + } + if ("wx_game_template".equals(tableName)) { + return true; + } + if ("wx_group".equals(tableName)) { + return true; + } + if ("wx_mall_apply".equals(tableName)) { + return true; + } + if ("wx_tags".equals(tableName)) { + return true; + } + if ("wx_tags_group".equals(tableName)) { + return true; + } + if ("wx_tags_type".equals(tableName)) { + return true; + } + if ("wx_user_channel".equals(tableName)) { + return true; + } + // wx_profit_sharing_receiver + // wx_profit_sharing_result + return false; + } + + @Override + public boolean doMappedStatementFIlter(MappedStatement ms) { + if ("com.iformall.mapper.MallUserInfoMapper.selectByUserName".equals(ms.getId())) + return true; + return false; + } +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java index 1a0abcc45..cd465e3ad 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/BaseController.java @@ -68,11 +68,9 @@ public class BaseController { } public String getTenantId() { - Long bUserId = getUserId(); - WxMerchantBUser user = wxMerchantBUserService.getById(bUserId); - if (user == null) - throw new MallinkException(ErrorCode.USER_IS_EMPTY); - return user.getTenantId(); + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String tenantId = (String) request.getAttribute(AuthorizationInterceptor.TENANT_ID); + return tenantId; } public WxAppinfo getAppInfo(String appId) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java index 8048a158b..afd452b74 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java @@ -10,6 +10,8 @@ import java.util.Map; public interface MallUserInfoMapper extends CommonMapper { List findList(MallUserInfo mallUserInfo); + + MallUserInfo selectByUserName(@Param("username") String username); Integer hasButtonPermission(@Param("userId") Long userId, @Param("permission") String permission); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java index a4a87b422..9afcf7945 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java @@ -74,9 +74,7 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { @Override public MallUserInfo getByUsername(String username) { - MallUserInfo userInfo = new MallUserInfo(); - userInfo.setUsername(username); - return mallUserInfoMapper.selectOne(userInfo); + return mallUserInfoMapper.selectByUserName(username); } @Override diff --git a/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml b/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml index 0fda4504e..854539969 100644 --- a/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml @@ -88,6 +88,14 @@ select from mall_user_info + +