diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index 37f30ea..1eb9422 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
 import com.supwisdom.dlpay.framework.util.Constants;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.multitenant.TenantContextHolder;
 import com.supwisdom.multitenant.TenantDetailsProvider;
 import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.slf4j.Logger;
@@ -28,7 +29,7 @@
   @SchedulerLock(name = "DayendSettleTask", lockAtMostForString = "PT30M")
   public void doSettleTask() {
     if (logger.isDebugEnabled()) logger.debug("进入日结算任务！");
-    tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID);
+    TenantContextHolder.getContext().setTenant(tenantDetailsProvider.defaultTenant());
 
     settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
     try {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
index 632ffde..ebe49e4 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
@@ -1,18 +1,12 @@
 package com.supwisdom.dlpay.framework.filter;
 
-import com.google.gson.Gson;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import javax.servlet.*;
 import javax.servlet.annotation.WebFilter;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 @WebFilter
 public class CrosXssFilter implements Filter {
-  private static final Logger logger = LoggerFactory.getLogger(CrosXssFilter.class);
 
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
@@ -21,31 +15,11 @@
 
   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
-    request.setCharacterEncoding("utf-8");
-
-    //跨域设置
-//    if(response instanceof HttpServletResponse){
-//      HttpServletResponse httpServletResponse=(HttpServletResponse)response;
-//      //通过在响应 header 中设置 ‘*’ 来允许来自所有域的跨域请求访问。
-//      httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
-//      //通过对 Credentials 参数的设置，就可以保持跨域 Ajax 时的 Cookie
-//      //设置了Allow-Credentials，Allow-Origin就不能为*,需要指明具体的url域
-//      //httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
-//      //请求方式
-//      httpServletResponse.setHeader("Access-Control-Allow-Methods", "*");
-//      //（预检请求）的返回结果（即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息） 可以被缓存多久
-//      httpServletResponse.setHeader("Access-Control-Max-Age", "86400");
-//      //首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段
-//      httpServletResponse.setHeader("Access-Control-Allow-Headers", "*");
-//    }
-
     //sql,xss过滤
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-//    logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}",  httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
     XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(
         httpServletRequest);
     chain.doFilter(xssHttpServletRequestWrapper, response);
-//    logger.info("CrosXssFilter..........doFilter url:{},ParameterMap:{}", xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
   }
 
   @Override
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
index c58260d..e234066 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
@@ -49,10 +49,6 @@
       try {
         validate(request);
       } catch (ValidateCodeException e) {
-        //response.setStatus(HttpStatus.OK.value());
-        //response.setContentType("application/json;charset=UTF-8");
-        //response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));
-        //response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());
         myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);
         return;
       }
@@ -66,27 +62,6 @@
     } else {
       request.getSession().removeAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
     }
-//    VerifyCode imageCode = (VerifyCode) request.getSession().getAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);
-//    String inputCode;
-//    try {
-//      inputCode = request.getParameter("imageCode");
-//    } catch (Exception e) {
-//      throw new ValidateCodeException("获取验证码的值失败");
-//    }
-//    if (StringUtil.isEmpty(inputCode)) {
-//      throw new ValidateCodeException("验证码不能为空");
-//    }
-//    if (null == imageCode) {
-//      throw new ValidateCodeException("验证码不存在");
-//    }
-//    if (imageCode.isExpired()) {
-//      request.getSession().removeAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);
-//      throw new ValidateCodeException("验证码已过期");
-//    }
-//    if (!StringUtil.equalsIgnoreCase(imageCode.getText(), inputCode)) {
-//      throw new ValidateCodeException("验证码不匹配");
-//    }
-//    request.getSession().removeAttribute(ImageCodeUtil.LOGIN_IMAGECODE_SESSIONKEY);
   }
 
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java
index abaa46a..f74d15d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java
@@ -5,7 +5,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
 import org.springframework.stereotype.Component;
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java
index 755828d..88f2121 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java
@@ -5,7 +5,9 @@
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.service.OperatorDetailService;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.supwisdom.multitenant.TenantDetails;
+import com.supwisdom.multitenant.TenantSessionHelper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.AuthorityUtils;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -16,16 +18,30 @@
 import java.util.Collection;
 import java.util.List;
 
+import static org.apache.commons.lang3.StringUtils.substringAfter;
+import static org.apache.commons.lang3.StringUtils.substringBefore;
+
+
+@Slf4j
 @Service
 public class OperatorDetailServiceImpl implements OperatorDetailService {
-  @Autowired
-  private OperatorDao operatorDao;
-  @Autowired
-  private OperRoleDao operRoleDao;
+  private final OperatorDao operatorDao;
+  private final OperRoleDao operRoleDao;
+  private final TenantSessionHelper tenantSessionHelper;
+
+  public OperatorDetailServiceImpl(OperatorDao operatorDao, OperRoleDao operRoleDao,
+                                   TenantSessionHelper tenantSessionHelper) {
+    this.operatorDao = operatorDao;
+    this.operRoleDao = operRoleDao;
+    this.tenantSessionHelper = tenantSessionHelper;
+  }
 
   @Override
   public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-    TOperator oper = operatorDao.findByOpercode(username);
+    String domain = substringAfter(username, "@");
+    tenantSessionHelper.setSessionTenantById(domain);
+    String realname = substringBefore(username, "@");
+    TOperator oper = operatorDao.findByOpercode(realname);
     if (null == oper) {
       throw new UsernameNotFoundException("管理员不存在");
     }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index a422391..4b88ed0 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.multitenant.TenantDetails
 import com.supwisdom.multitenant.TenantDetailsProvider
+import com.supwisdom.multitenant.TenantSessionData
 import com.supwisdom.multitenant.annotations.EnableHttpHeaderTenantInterceptor
 import com.supwisdom.multitenant.annotations.EnableSessionTenantInterceptor
 import io.lettuce.core.ReadFrom
@@ -178,6 +179,10 @@
         dataCenter = "default"
     }
 
+    override fun defaultTenant(): TenantDetails {
+        return defaultTenant
+    }
+
     override fun createDetailsById(id: String?): TenantDetails {
         return tenantService.findByTenantId(id)?.let { catalog ->
             TenantDetails().apply {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
index e578794..8b38238 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
@@ -36,7 +36,7 @@
     fun index(@PathVariable schema: String, request: HttpServletRequest,
               response: HttpServletResponse): String {
         logger.error("====================== 收到微信回调通知 wechat notify: ========================")
-        tenantDetailsProvider.defaultTenant(schema)
+        TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(schema)
         try {
             // 解析结果存储在HashMap
             var map: MutableMap<String, String> = HashMap()
@@ -47,7 +47,7 @@
             // 得到xml根元素
             val root = document.rootElement
             // 得到根元素的所有子节点
-            val elementList  = root.elements() as MutableList<Element>
+            val elementList = root.elements() as MutableList<Element>
             // 遍历所有子节点
             for (e in elementList) {
                 map[e.name] = e.text
@@ -90,7 +90,7 @@
     fun alipay(@PathVariable schema: String, request: HttpServletRequest,
                response: HttpServletResponse): String {
         logger.error("====================== 收到支付宝回调通知 alipay notify: ========================")
-        tenantDetailsProvider.defaultTenant(schema)
+        TenantContextHolder.getContext().tenant = tenantDetailsProvider.createDetailsById(schema)
         // 解析结果存储在HashMap
         val map = makeMapFromParam(request)
         val resp = alipayService.doNotify(map)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
index 33d9a72..e3ab9e4 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
@@ -14,6 +14,7 @@
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.multitenant.TenantContextHolder
 import com.supwisdom.multitenant.TenantDetailsProvider
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.SchedulerLock
@@ -162,7 +163,7 @@
     @Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}")
     @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostForString = "PT30M")
     fun runCheck() {
-        tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID)
+        TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant()
 
         val allSourcetype = sourceTypeService.allEnabledSourcetype
                 ?: return
@@ -276,7 +277,7 @@
     fun checkAndDownloadChkfile(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 2. 根据对账日期下载对账文件
         try {
-            tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID)
+            TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant()
             if (checkStatus.settleStatus) {
                 return AsyncResult(ExecutorResult(checkStatus, FAIL, "[${checkStatus.checkAccdate}]日对账已完成"))
             }
@@ -319,7 +320,7 @@
     @Async("sourcetypeCheckTaskExecutor")
     fun reconciliation(checkStatus: TSourceTypeCheckStatus): Future<ExecutorResult> {
         // 3. 完成对账
-        tenantDetailsProvider.defaultTenant(Constants.DEFAULT_TENANTID)
+        TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant()
         if (!checkStatus.checkFileOk) {
             return AsyncResult(ExecutorResult(checkStatus, FAIL, "checkAccdate=[${checkStatus.checkAccdate}]对账单未完成下载，不能对账"))
         } else if (checkStatus.settleStatus) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index ed5783f..deabb41 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -21,16 +21,13 @@
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.system.service.FunctionService
 import mu.KotlinLogging
-import org.jose4j.jwt.ReservedClaimNames
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.redis.connection.RedisConnectionFactory
 import org.springframework.http.HttpStatus
 import org.springframework.http.ResponseEntity
-import org.springframework.security.core.Authentication
 import org.springframework.security.core.annotation.AuthenticationPrincipal
 import org.springframework.security.core.context.SecurityContextHolder
 import org.springframework.security.core.userdetails.UserDetails
-import org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper
 import org.springframework.security.oauth2.provider.OAuth2Authentication
 import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore
 import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler
@@ -40,7 +37,6 @@
 import org.springframework.web.bind.annotation.*
 import org.springframework.web.context.request.ServletWebRequest
 import java.io.IOException
-import java.security.Principal
 import java.util.*
 import javax.imageio.ImageIO
 import javax.servlet.http.HttpServletRequest
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt
deleted file mode 100644
index b9b6034..0000000
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/tenant.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.supwisdom.dlpay.framework
-
-import mu.KotlinLogging
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.context.annotation.Configuration
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
-import javax.annotation.PostConstruct
-
-
-//@Order(1)
-//@WebFilter(filterName = "multi_tenant_filter", urlPatterns = ["/*"])
-//class TenantNameFilter : Filter {
-//    override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
-//        if (request is HttpServletRequest) {
-//            request.getHeader(Constants.HEADER_TETANTID)?.also {
-//                // set tanent datasource
-//                TenantContext.setTenantSchema(it)
-//            } ?: TenantContext.setTenantSchema("default")
-//        }
-//        chain.doFilter(request, response)
-//    }
-//}
-
-//@Configuration
-//class MultiTenantDatasourceConfiguration : WebMvcConfigurer {
-//
-//    private val logger = KotlinLogging.logger { }
-//    @Autowired
-//    private lateinit var tenantInterceptor: TenantInterceptor
-//
-//    @PostConstruct
-//    fun post() {
-//        logger.info("MultiTenantDatasourceConfiguration post constructor.")
-//    }
-//
-//    override fun addInterceptors(registry: InterceptorRegistry) {
-//        logger.info("adding interceptor(s).")
-//        registry.addInterceptor(tenantInterceptor)
-//    }
-//}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
index ee4a5c6..61c805f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -231,6 +231,7 @@
         class ApiWebSecurityConfigurationAdapter : WebSecurityConfigurerAdapter() {
             @Autowired
             lateinit var apiJwtAuthenticationFilter: ApiJwtAuthenticationFilter
+
             override fun configure(http: HttpSecurity) {
                 // 设置 API 访问权限管理
                 http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
@@ -374,14 +375,14 @@
                 http.apply(validateCodeSecurityConfig)
                         .and()
                         .authorizeRequests()
-                        .antMatchers("/login", "/login/form", "/mobileapi/**","/userinfor").permitAll()
+                        .antMatchers("/login", "/login/form", "/mobileapi/**", "/userinfor").permitAll()
                         .antMatchers("/static/**").permitAll()
                         .antMatchers("/code/image").permitAll()
                         .antMatchers("/**").hasAnyRole("USER", "ADMIN")
                         .anyRequest().authenticated()
                         .and()
                         .sessionManagement()
-                        .sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
+                        .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
                         .and()
                         .formLogin()
                         .loginPage("/login")
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 8627bf0..906a5be 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -42,5 +42,6 @@
 spring.redis.database=0
 ###################################################
 multi-tenant.header.key=X-TENANT-ID
-multi-tenant.session.name=multi-tenant-id
+multi-tenant.session.name=tenant-id
+multi-tenant.session.enableSessionScopedBean=false
 multi-tenant.dbschema=public
