diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
index 2eae021..805a984 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
@@ -33,16 +33,28 @@
   @NotNull
   private String tenantid = "";
 
+  @Column(name = "ISSIGNED", length = 20)
+  private String issigned;
+
   public TPersonIdentity() {
   }
 
-  public TPersonIdentity(String thirdUid, TPerson person, String status, Integer lossflag, Integer lockflag, String createtime) {
+  public TPersonIdentity(String thirdUid, TPerson person, String status, Integer lossflag, Integer lockflag, String createtime,String issigned) {
     this.thirdUid = thirdUid;
     this.person = person;
     this.status = status;
     this.lossflag = lossflag;
     this.lockflag = lockflag;
     this.createtime = createtime;
+    this.issigned = issigned;
+  }
+
+  public String getIssigned() {
+    return issigned;
+  }
+
+  public void setIssigned(String issigned) {
+    this.issigned = issigned;
   }
 
   public String getThirdUid() {
diff --git a/src/main/java/com/supwisdom/dlpay/framework/core/JwtConfig.java b/src/main/java/com/supwisdom/dlpay/framework/core/JwtConfig.java
index c8992a8..fbaa21c 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/core/JwtConfig.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/core/JwtConfig.java
@@ -29,4 +29,8 @@
   public String getTokenHeader() {
     return tokenHeader;
   }
+
+  public void setExpiration(Long expiration) {
+    this.expiration = expiration;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
index b44b872..5070d62 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
@@ -57,7 +57,6 @@
     em.setPackagesToScan("com.supwisdom");
     em.setJpaPropertyMap(properties);
     em.setJpaVendorAdapter(getJpaVendorAdapter());
-    log.info("setup multi-tenant entityManagerFactor");
     return em;
   }
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
index 07e4aaf..c6788d8 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
@@ -12,7 +12,7 @@
 
   public static final int SYSPARAID_NO1 = 1; //系统默认最大余额限制的ID
   public static final int SYSPARAID_NO2 = 2; //paraid=2
-
+  public static final int SYSPARAID_NO3 = 3; //用户过期时间，单位秒
   public static final double SYSPARA_NO1_DEFAULT = 10000.0; // 系统默认最大余额限制
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index a525547..3d93fc1 100644
--- a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -33,4 +33,10 @@
    * */
   public static final int DICTTYPE_NO1 = 1; //冲正状态字典
   public static final int DICTTYPE_NO2 = 2; //流水状态字典
+
+  /*
+  * 页面ID
+  * */
+
+  public static final String PAGE_USERXIEYI = "xieyi";//用户协议页面
 }
diff --git a/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java b/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
index d4521d5..5aa25fb 100644
--- a/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/util/DlpayUtil.java
@@ -10,6 +10,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Random;
 
 public class DlpayUtil {
   /**
@@ -73,4 +74,15 @@
       return root.getText();
     }
   }
+  public static String getCodeRandom() {
+    Random random = new Random();
+    String fourRandom = random.nextInt(1000000) + "";
+    int randLength = fourRandom.length();
+    if (randLength < 6) {
+      for (int i = 1; i <= 6 - randLength; i++)
+        fourRandom = "0" + fourRandom;
+    }
+    return fourRandom;
+  }
+
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
index 6a441fc..60efda7 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
@@ -8,8 +8,10 @@
 import com.supwisdom.dlpay.framework.domain.JwtRedis
 import com.supwisdom.dlpay.framework.redisrepo.ApiClientRepository
 import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository
+import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.DateUtil
+import com.supwisdom.dlpay.framework.util.SysparaUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.mobile.dao.MobileUserDao
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
@@ -38,13 +40,16 @@
     lateinit var jwtConfig: JwtConfig
     @Autowired
     lateinit var apiJwtRepository: ApiJwtRepository
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
 
     override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) {
         logger.error(request?.getParameter("platform"))
         var temp = authentication!!.principal as TBMobileUser
         var user = mobileUserDao.findByPhone(temp.phone)
         if(user!=null) {
-            //TODO 从数据取jwtConfig.expiration
+            var exp = systemUtilService.getSysparaValueAsInt(SysparaUtil.SYSPARAID_NO3,60*60*24*3)
+            jwtConfig.expiration = exp as Long
             val token = JwtTokenUtil(jwtConfig).generateToken(
                     mapOf("uid" to user.uid, "issuer" to "payapi",
                             "audience" to temp.phone,
@@ -71,7 +76,10 @@
             mobileUserDao.save(user)
             response.status = HttpStatus.OK.value()
             response.contentType = "application/json;charset=UTF-8"
-            response.writer.write(objectMapper.writeValueAsString(JsonResult.ok().put("token", token.jwtToken)
+            response.writer.write(objectMapper.writeValueAsString(JsonResult.ok()
+                    .put("token", token.jwtToken)
+                    ?.put("expire",token.expiration.valueInMillis)
+                    ?.put("now",System.currentTimeMillis())
                     ?.put("tenantid", "mobile")))
         }else{
             throw UserLoginFailException("登录错误")
@@ -101,13 +109,15 @@
             errmsg = exception.message!!
         }
         var temp = request.getParameter("username")
-        mobileUserDao.findByPhone(temp)?.let {
-            if (it.loginpwderror == null || it.loginpwderror == 0) {
-                it.loginpwderror = 0
-                it.loginpwderrortime = System.currentTimeMillis()
+        if(!temp.isNullOrEmpty()) {
+            mobileUserDao.findByPhone(temp)?.let {
+                if (it.loginpwderror == null || it.loginpwderror == 0) {
+                    it.loginpwderror = 0
+                    it.loginpwderrortime = System.currentTimeMillis()
+                }
+                it.loginpwderror += 1
+                mobileUserDao.save(it)
             }
-            it.loginpwderror += 1
-            mobileUserDao.save(it)
         }
         response.status = HttpStatus.OK.value()
         response.contentType = "application/json;charset=UTF-8"
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 0b034d6..df5d623 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -1,10 +1,21 @@
 package com.supwisdom.dlpay.mobile
 
 import com.supwisdom.dlpay.api.bean.JsonResult
+import com.supwisdom.dlpay.framework.core.JwtConfig
+import com.supwisdom.dlpay.framework.core.JwtTokenUtil
+import com.supwisdom.dlpay.framework.domain.JwtRedis
+import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.mobile.domain.TBMobileUser
+import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.mobile.service.MobileUserService
+import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.dlpay.util.DlpayUtil
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.redis.core.RedisTemplate
 import org.springframework.security.core.context.SecurityContextHolder
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
 import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
@@ -13,28 +24,142 @@
 import org.springframework.web.bind.annotation.RequestMethod
 import org.springframework.web.bind.annotation.RequestParam
 import java.security.Principal
+import java.time.Duration
 
 @RestController
 @RequestMapping("/mobileapi/i")
 class ApiInit {
     @Autowired
+    lateinit var mobileApiService: MobileApiService
+    @Autowired
     lateinit var redisTemplate: RedisTemplate<String, String>
+    @Autowired
+    lateinit var jwtConfig: JwtConfig
+    @Autowired
+    lateinit var apiJwtRepository: ApiJwtRepository
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
+
     /*
     * TODO 防止重复调用发验证码
     * */
+    @RequestMapping("/time")
+    fun time(): JsonResult {
+        return JsonResult.ok("OK").put("now", System.currentTimeMillis())!!
+    }
+
+    @RequestMapping("/uxy")
+    fun xieyi(): JsonResult {
+        var page = mobileApiService.findPageById(ConstantUtil.PAGE_USERXIEYI)
+        if (page != null) {
+            return JsonResult.ok("OK").put("page", page.pageContent)!!
+        }
+        return JsonResult.error("页面未配置")
+    }
+
     @RequestMapping("/code")
     fun code(@RequestParam phone: String): JsonResult {
-        return JsonResult.ok("OK")
+        if (phone.isNullOrEmpty() || phone.length != 11 || !StringUtil.isMobile(phone)) {
+            return JsonResult.error("手机号有误")
+        }
+        var user = mobileApiService.findUserByPhone(phone)
+        if (user != null && !user.loginpwd.isNullOrEmpty()) {
+            return JsonResult.error("该手机号已注册，请登录或找回密码")
+        }
+        // 如果未设置密码
+        var temp = redisTemplate.opsForValue().get(phone)
+        if (temp.isNullOrEmpty()) {
+            var code = RandomUtils.randomNumber(6)
+            System.out.println(code)
+            redisTemplate.opsForValue().set(phone, code, Duration.ofMinutes(5))
+        }
+        //TODO code
+        return JsonResult.ok("验证码已发送")
     }
 
     @RequestMapping("/checkcode")
-    fun check(@RequestParam phone: String,@RequestParam code: String): JsonResult {
-        return JsonResult.ok("OK")
+    fun check(@RequestParam phone: String,
+              @RequestParam code: String,
+              @RequestParam platform: String?,
+              @RequestParam uuid: String?): JsonResult {
+        var temp = redisTemplate.opsForValue().get(phone)
+        if (!temp.isNullOrEmpty()) {
+            if (temp != code) {
+                return JsonResult.error("验证码错误")
+            }
+            //TODO general user
+            var user = mobileApiService.findUserByPhone(phone)
+            if (user == null) {
+                user = TBMobileUser()
+                user.phone = phone
+                user.registerplatform = platform
+                user.registerdate = DateUtil.getNow()
+                user.devuid = uuid
+                user.status = TradeDict.STATUS_NORMAL
+                user.paypwderror = 0
+                user.loginpwderror = 0
+                user = mobileApiService.saveUser(user)
+            }
+            var code = RandomUtils.getRandomString(30)
+            redisTemplate.opsForValue().set(user.uid, code, Duration.ofDays(1))
+            return JsonResult.ok("OK").put("uid", user.uid)?.put("code",code)!!
+        } else {
+            return JsonResult.error("验证码已过期，请重新发送")
+        }
     }
 
     @RequestMapping("/register")
-    fun register(@RequestParam uid: String,@RequestParam pwd: String,@RequestParam repwd: String): JsonResult {
-        return JsonResult.ok("OK")
+    fun register(@RequestParam id: String,
+                 @RequestParam pwd: String,
+                 @RequestParam repwd: String,
+                 @RequestParam random: String): JsonResult {
+        if(random.isNullOrEmpty()){
+            return JsonResult.error("注册信息有误，请重新注册")
+        }
+        if (pwd.isNullOrEmpty() || repwd.isNullOrEmpty() || pwd.length < 6) {
+            return JsonResult.error("请重新设置密码，密码不能小于6位字符")
+        }
+        if (pwd != repwd) {
+            return JsonResult.error("两次密码不一致")
+        }
+        var user: TBMobileUser? = mobileApiService.findUserById(id) ?: return JsonResult.error("用户不存在，请注册")
+        var code =   redisTemplate.opsForValue().get(id)
+        if(code!=random){
+            return JsonResult.error("注册信息有误，请重新注册")
+        }
+        val encoder = BCryptPasswordEncoder()
+        user!!.loginpwd = encoder.encode(pwd)
+        var exp = systemUtilService.getSysparaValueAsInt(SysparaUtil.SYSPARAID_NO3,60*60*24*3)
+        jwtConfig.expiration = exp as Long
+        val token = JwtTokenUtil(jwtConfig).generateToken(
+                mapOf("uid" to user.uid, "issuer" to "payapi",
+                        "audience" to user.phone,
+                        Constants.JWT_CLAIM_TENANTID to "mobile",
+                        "authorities" to user.authorities))
+        var jwt = JwtRedis().apply {
+            jti = token.jti
+            uid = user.phone
+            status = TradeDict.JWT_STATUS_NORMAL
+            expiration = token.expiration.valueInMillis
+        }.apply {
+            //删除之前的token
+            if(!user.jti.isNullOrEmpty()){
+                apiJwtRepository.deleteById(user.jti!!)
+            }
+            apiJwtRepository.save(this)
+        }
+        if (user.loginpwderror != null && user.loginpwderror!! > 0) {
+            user.loginpwderror = 0
+            user.loginpwderrortime = null
+        }
+        user.lastlogin = DateUtil.getNow()
+        user.jti = jwt.jti
+        mobileApiService.saveUser(user)
+
+        return JsonResult.ok("OK").put("token", token.jwtToken)
+                ?.put("expire",token.expiration.valueInMillis)
+                ?.put("now",System.currentTimeMillis())
+                ?.put("tenantid", "mobile")!!
     }
 }
 
@@ -43,22 +168,17 @@
 @RequestMapping("/mobileapi/v1")
 class ApiV1 {
     @Autowired
+    lateinit var mobileApiService: MobileApiService
+
+    @Autowired
     lateinit var redisTemplate: RedisTemplate<String, String>
-    @RequestMapping("/logout")
-    fun logout(request: HttpServletRequest, response: HttpServletResponse): JsonResult {
-        SecurityContextHolder.getContext().authentication?.also {
-            SecurityContextLogoutHandler().logout(request, response, it)
-        }
-        return JsonResult.ok("退出成功")
-    }
 
     @RequestMapping("/infor")
     fun getUserInfor(): JsonResult {
         val p = SecurityContextHolder.getContext().authentication
-        return JsonResult.ok("OK").put("name", p.name)!!
+        return JsonResult.ok("OK").put("name", p.name)?.put("now", System.currentTimeMillis())!!
     }
 
-
     @RequestMapping("/register")
     fun register(): JsonResult {
         val p = SecurityContextHolder.getContext().authentication
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt
new file mode 100644
index 0000000..8146652
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/ApiDao.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.mobile.dao
+
+import com.supwisdom.dlpay.mobile.domain.TBPages
+import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.stereotype.Repository
+
+@Repository
+interface PagesDao : JpaRepository<TBPages,String>
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt
index 5261586..76ad4c6 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/dao/MobileUserDao.kt
@@ -7,4 +7,6 @@
 @Repository
 interface MobileUserDao : JpaRepository<TBMobileUser, String> {
     fun findByPhone(phone: String): TBMobileUser?
-}
\ No newline at end of file
+}
+
+
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt
index da95e4f..d0fbc7f 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.mobile.domain
 
 import com.supwisdom.dlpay.framework.util.TradeDict
+import org.hibernate.annotations.GenericGenerator
 import org.springframework.security.core.GrantedAuthority
 import org.springframework.security.core.userdetails.UserDetails
 import javax.persistence.*
@@ -40,6 +41,8 @@
 
 
     @Id
+    @GenericGenerator(name = "idGenerator", strategy = "uuid")
+    @GeneratedValue(generator = "idGenerator")
     @Column(name = "uid", nullable = false, length = 32)
     var uid: String = ""
     /**
@@ -69,7 +72,7 @@
     /**
      * 注册手机类型
      * */
-    @Column(name = "registerplatform", length = 20)
+    @Column(name = "registerplatform", length = 100)
     var registerplatform: String? = null
 
     /**
@@ -81,7 +84,7 @@
     /**
      * 最后登录手机类型
      * */
-    @Column(name = "lastloginplatform", length = 20)
+    @Column(name = "lastloginplatform", length = 100)
     var lastloginplatform: String? = null
 
     /**
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt
new file mode 100644
index 0000000..cbe892b
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBPages.kt
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.mobile.domain
+
+import javax.persistence.Column
+import javax.persistence.Entity
+import javax.persistence.Id
+import javax.persistence.Table
+
+@Entity
+@Table(name = "TB_PAGES")
+class TBPages{
+    @Id
+    @Column(name = "pageid", nullable = false, length = 32)
+    var pageid: String = ""
+
+    @Column(name = "pagecontent",columnDefinition = "TEXT")
+    var pageContent:String = ""
+
+    @Column(name = "pagedes", length = 200)
+    var pagedes: String? = null
+
+    @Column(name = "lastupdate", length = 14)
+    var lastupdate: String? = null
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
index c01e430..6ddc123 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
@@ -1,9 +1,15 @@
 package com.supwisdom.dlpay.mobile.service
 
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
+import com.supwisdom.dlpay.mobile.domain.TBPages
 
 interface MobileApiService {
     fun saveUser(user: TBMobileUser): TBMobileUser
 
+    fun findPageById(pageid: String): TBPages?
+
+    fun findUserByPhone(phone: String): TBMobileUser?
+
+    fun findUserById(id: String): TBMobileUser?
 
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
index fec5155..21cd2ee 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
@@ -1,8 +1,9 @@
 package com.supwisdom.dlpay.mobile.service.impl
 
-import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.mobile.dao.MobileUserDao
+import com.supwisdom.dlpay.mobile.dao.PagesDao
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
+import com.supwisdom.dlpay.mobile.domain.TBPages
 import com.supwisdom.dlpay.mobile.service.MobileApiService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
@@ -12,8 +13,30 @@
     @Autowired
     lateinit var mobileUserDao: MobileUserDao
 
+    @Autowired
+    lateinit var pagesDao: PagesDao
+
     override fun saveUser(user: TBMobileUser): TBMobileUser {
-        user.lastlogin = DateUtil.getNow()
         return mobileUserDao.save(user)
     }
+
+    override fun findPageById(pageid: String): TBPages? {
+        var t = pagesDao.findById(pageid)
+        if (t.isPresent) {
+            return t.get()
+        }
+        return null
+    }
+
+    override fun findUserByPhone(phone: String): TBMobileUser? {
+        return mobileUserDao.findByPhone(phone)
+    }
+
+    override fun findUserById(id: String): TBMobileUser? {
+        var t = mobileUserDao.findById(id)
+        if(t.isPresent){
+            return t.get()
+        }
+        return null
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileUserServiceImpl.kt b/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileUserServiceImpl.kt
index 179f5fe..9c96ad6 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileUserServiceImpl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileUserServiceImpl.kt
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
 import com.supwisdom.dlpay.mobile.exception.UserLoginFailException
 import com.supwisdom.dlpay.mobile.service.MobileUserService
+import org.slf4j.LoggerFactory
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.security.core.GrantedAuthority
 import org.springframework.security.core.authority.AuthorityUtils
@@ -13,12 +14,21 @@
 
 @Service
 class MobileUserServiceImpl : MobileUserService {
+    var logger = LoggerFactory.getLogger(MobileUserServiceImpl::class.java)
+
     @Autowired
     lateinit var mobileUserDao: MobileUserDao
 
     override fun loadUserByUsername(username: String?): UserDetails {
+        logger.error("username:"+username)
+        if(username.isNullOrEmpty()){
+            throw UsernameNotFoundException("用户不存在")
+        }
         var temp = mobileUserDao.findByPhone(username!!)
         if(temp!=null) {
+            if(temp.loginpwd.isNullOrEmpty()){
+                throw UserLoginFailException("用户注册后未设置登录密码，请重新注册")
+            }
             if (temp.loginpwderror != null && temp.loginpwderror!! >= 3 && (System.currentTimeMillis() - temp.loginpwderrortime!!) < 1000 * 60 * 30) {
                 throw UserLoginFailException("密码错误次数过多，请稍后再试")
             } else if (temp.loginpwderror != null && temp.loginpwderror!! >= 3 && (System.currentTimeMillis() - temp.loginpwderrortime!!) > 1000 * 60 * 30) {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 5aad561..cff3a80 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -38,12 +38,17 @@
 import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher
 import org.springframework.stereotype.Component
+import org.springframework.web.cors.CorsConfiguration
+import org.springframework.web.cors.CorsConfigurationSource
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource
 import org.springframework.web.filter.OncePerRequestFilter
 import java.security.SecureRandom
+import java.util.*
 import javax.servlet.FilterChain
 import javax.servlet.http.HttpServletRequest
 import javax.servlet.http.HttpServletResponse
 import javax.sql.DataSource
+import kotlin.collections.ArrayList
 
 
 @Component
@@ -224,11 +229,13 @@
             override fun configure(http: HttpSecurity) {
                 http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                         .and()
+                        .cors()
+                        .and()
                         .antMatcher("/mobileapi/**")
-
                         .addFilterAfter(apiFilter,
                                 UsernamePasswordAuthenticationFilter::class.java)
-                        .authorizeRequests().antMatchers("/mobileapi/i/**").permitAll().anyRequest().authenticated()
+                        .authorizeRequests().antMatchers("/mobileapi/i/**","/mobileapi/login")
+                        .permitAll().anyRequest().authenticated()
                         .and()
                         .formLogin()
                         .loginProcessingUrl("/mobileapi/login")
@@ -238,6 +245,17 @@
                         .sessionManagement().maximumSessions(1)
                         .expiredUrl("/mobileapi/sessionexpired")
             }
+            @Bean
+            fun  corsConfigurationSource(): CorsConfigurationSource {
+                //手机端支持跨域请求
+                val configuration = CorsConfiguration()
+                configuration.allowedOrigins = Arrays.asList("*")
+                configuration.allowedMethods = Arrays.asList("GET","POST")
+                configuration.allowedHeaders = Arrays.asList("*")
+                val source =  UrlBasedCorsConfigurationSource()
+                source.registerCorsConfiguration("/mobileapi/**", configuration);
+                return source
+            }
         }
 
         @Configuration
