完善cliet调用接口的代码
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/security/core/userdetails/MyUserDetailsService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/security/core/userdetails/MyUserDetailsService.java
index 5cecb9d..83ee8ab 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/security/core/userdetails/MyUserDetailsService.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/security/core/userdetails/MyUserDetailsService.java
@@ -14,25 +14,35 @@
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 
+import com.supwisdom.leaveschool.client.service.SampleUser1SecurityUserRemoteService;
+import com.supwisdom.leaveschool.proxy.user.model.SecurityUser;
+
 @Service
 public class MyUserDetailsService implements UserDetailsService {
   
-  //private static final Log logger = LogFactory.getLog(MyUserDetailsService.class);
   private static final Logger logger = LoggerFactory.getLogger(MyUserDetailsService.class);
   
   @Autowired
   PasswordEncoder passwordEncoder;
   
+  @Autowired
+  SampleUser1SecurityUserRemoteService sampleUser1SecurityUserRemoteService;
+  
   @Override
   public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
     
     logger.debug("MyUserDetailsService.loadUserByUsername({})", username);
     
+    SecurityUser securityUser = sampleUser1SecurityUserRemoteService.loadUserByUsername(username);
+    if (securityUser == null) {
+      throw new UsernameNotFoundException(String.format("%s not found", username));
+    }
+    
     // TODO: 从数据库获取
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
     authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
     
-    MyUser myUser = new MyUser("user", passwordEncoder.encode("password"), authorities);
+    MyUser myUser = new MyUser(securityUser.getUser().getUsername(), securityUser.getUser().getPassword(), authorities);
     logger.debug("myUser is {}", myUser);
     
     return myUser;
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
new file mode 100644
index 0000000..7549cab
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminGroupRemoteService.java
@@ -0,0 +1,38 @@
+package com.supwisdom.leaveschool.client.service;
+
+import java.util.Map;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.supwisdom.leaveschool.client.service.fallback.SampleUser1AdminGroupRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.user.domain.Group;
+
+@FeignClient(
+    name = "sample-user-1-admin-user", 
+    url = "${gateway.api.url}/sample-user/api/v1/admin/groups", 
+    fallback = SampleUser1AdminGroupRemoteHystrix.class
+)
+public interface SampleUser1AdminGroupRemoteService {
+
+  @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public PagerResponseModel<Group> list();
+
+  @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Group get(@PathVariable("id") String id);
+
+  @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> create(@RequestBody Group user);
+  
+  @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> update(@RequestBody Group user);
+  
+  @RequestMapping(path = "/{id}", method = RequestMethod.DELETE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> delete(@PathVariable("id") String id);
+  
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
new file mode 100644
index 0000000..524d82c
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminRoleRemoteService.java
@@ -0,0 +1,38 @@
+package com.supwisdom.leaveschool.client.service;
+
+import java.util.Map;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.supwisdom.leaveschool.client.service.fallback.SampleUser1AdminRoleRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.user.domain.Role;
+
+@FeignClient(
+    name = "sample-user-1-admin-user", 
+    url = "${gateway.api.url}/sample-user/api/v1/admin/roles", 
+    fallback = SampleUser1AdminRoleRemoteHystrix.class
+)
+public interface SampleUser1AdminRoleRemoteService {
+  
+  @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public PagerResponseModel<Role> list();
+
+  @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Role get(@PathVariable("id") String id);
+
+  @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> create(@RequestBody Role user);
+  
+  @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> update(@RequestBody Role user);
+  
+  @RequestMapping(path = "/{id}", method = RequestMethod.DELETE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> delete(@PathVariable("id") String id);
+  
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
index 86962a3..c8b5b6f 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1AdminUserRemoteService.java
@@ -1,13 +1,17 @@
 package com.supwisdom.leaveschool.client.service;
 
-import org.json.JSONObject;
+import java.util.Map;
+
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.util.MimeTypeUtils;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import com.supwisdom.leaveschool.client.service.fallback.SampleUser1AdminUserRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.user.domain.User;
 
 @FeignClient(
     name = "sample-user-1-admin-user", 
@@ -17,6 +21,18 @@
 public interface SampleUser1AdminUserRemoteService {
   
   @RequestMapping(method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
-  public Object list();
+  public PagerResponseModel<User> list();
 
+  @RequestMapping(path = "/{id}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public User get(@PathVariable("id") String id);
+
+  @RequestMapping(method = RequestMethod.POST, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> create(@RequestBody User user);
+  
+  @RequestMapping(method = RequestMethod.PUT, consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> update(@RequestBody User user);
+  
+  @RequestMapping(path = "/{id}", method = RequestMethod.DELETE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public Map<String, Object> delete(@PathVariable("id") String id);
+  
 }
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java
new file mode 100644
index 0000000..d772b43
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/SampleUser1SecurityUserRemoteService.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.client.service;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.supwisdom.leaveschool.client.service.fallback.SampleUser1SecurityUserRemoteHystrix;
+import com.supwisdom.leaveschool.proxy.user.model.SecurityUser;
+
+@FeignClient(
+    name = "sample-user-1-security-user", 
+    url = "${gateway.api.url}/sample-user/api/v1/security/users", 
+    fallback = SampleUser1SecurityUserRemoteHystrix.class
+)
+public interface SampleUser1SecurityUserRemoteService {
+
+  @RequestMapping(path = "/{username}", method = RequestMethod.GET, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  public SecurityUser loadUserByUsername(@PathVariable("username") String username);
+  
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
new file mode 100644
index 0000000..dd985e0
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminGroupRemoteHystrix.java
@@ -0,0 +1,43 @@
+package com.supwisdom.leaveschool.client.service.fallback;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import com.supwisdom.leaveschool.client.service.SampleUser1AdminGroupRemoteService;
+import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.user.domain.Group;
+
+@Component
+public class SampleUser1AdminGroupRemoteHystrix implements SampleUser1AdminGroupRemoteService {
+  
+  private static final Logger logger = LoggerFactory.getLogger(SampleUser1AdminGroupRemoteHystrix.class);
+
+  @Override
+  public PagerResponseModel<Group> list() {
+    return null;
+  }
+
+  @Override
+  public Group get(String id) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> create(Group user) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> update(Group user) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> delete(String id) {
+    return null;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
new file mode 100644
index 0000000..dcb8cc5
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminRoleRemoteHystrix.java
@@ -0,0 +1,43 @@
+package com.supwisdom.leaveschool.client.service.fallback;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import com.supwisdom.leaveschool.client.service.SampleUser1AdminRoleRemoteService;
+import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.user.domain.Role;
+
+@Component
+public class SampleUser1AdminRoleRemoteHystrix implements SampleUser1AdminRoleRemoteService {
+  
+  private static final Logger logger = LoggerFactory.getLogger(SampleUser1AdminRoleRemoteHystrix.class);
+
+  @Override
+  public PagerResponseModel<Role> list() {
+    return null;
+  }
+
+  @Override
+  public Role get(String id) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> create(Role user) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> update(Role user) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> delete(String id) {
+    return null;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
index fbc86bf..0f4f9a8 100644
--- a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1AdminUserRemoteHystrix.java
@@ -1,11 +1,14 @@
 package com.supwisdom.leaveschool.client.service.fallback;
 
-import org.json.JSONObject;
+import java.util.Map;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import com.supwisdom.leaveschool.client.service.SampleUser1AdminUserRemoteService;
+import com.supwisdom.leaveschool.proxy.common.model.PagerResponseModel;
+import com.supwisdom.leaveschool.proxy.user.domain.User;
 
 @Component
 public class SampleUser1AdminUserRemoteHystrix implements SampleUser1AdminUserRemoteService {
@@ -13,7 +16,27 @@
   private static final Logger logger = LoggerFactory.getLogger(SampleUser1AdminUserRemoteHystrix.class);
 
   @Override
-  public Object list() {
+  public PagerResponseModel<User> list() {
+    return null;
+  }
+
+  @Override
+  public User get(String id) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> create(User user) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> update(User user) {
+    return null;
+  }
+
+  @Override
+  public Map<String, Object> delete(String id) {
     return null;
   }
 
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1SecurityUserRemoteHystrix.java b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1SecurityUserRemoteHystrix.java
new file mode 100644
index 0000000..c965744
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/client/service/fallback/SampleUser1SecurityUserRemoteHystrix.java
@@ -0,0 +1,16 @@
+package com.supwisdom.leaveschool.client.service.fallback;
+
+import org.springframework.stereotype.Component;
+
+import com.supwisdom.leaveschool.client.service.SampleUser1SecurityUserRemoteService;
+import com.supwisdom.leaveschool.proxy.user.model.SecurityUser;
+
+@Component
+public class SampleUser1SecurityUserRemoteHystrix implements SampleUser1SecurityUserRemoteService {
+
+  @Override
+  public SecurityUser loadUserByUsername(String username) {
+    return null;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/domain/ABaseDomain.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/domain/ABaseDomain.java
new file mode 100644
index 0000000..166cc6b
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/domain/ABaseDomain.java
@@ -0,0 +1,109 @@
+package com.supwisdom.leaveschool.proxy.common.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public abstract class ABaseDomain implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -4987240608338421556L;
+
+  private String id;
+
+  /**
+   * 获取主键
+   */
+  public String getId() {
+    return id;
+  }
+
+  /**
+   * 设置ID属性,主要用于人工指定键值
+   */
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  private String companyId = null;
+
+  private Boolean deleted = false;
+
+  private String addAccount = null;
+
+  private Date addTime = null;
+
+  private String editAccount = null;
+
+  private Date editTime = null;
+
+  private String deleteAccount = null;
+
+  private Date deleteTime = null;
+
+  public String getCompanyId() {
+    return companyId;
+  }
+
+  public void setCompanyId(String companyId) {
+    this.companyId = companyId;
+  }
+
+  public Boolean isDeleted() {
+    return deleted;
+  }
+
+  public void setDeleted(Boolean deleted) {
+    this.deleted = deleted;
+  }
+
+  public String getAddAccount() {
+    return addAccount;
+  }
+
+  public void setAddAccount(String addAccount) {
+    this.addAccount = addAccount;
+  }
+
+  public Date getAddTime() {
+    return addTime;
+  }
+
+  public void setAddTime(Date addTime) {
+    this.addTime = addTime;
+  }
+
+  public String getEditAccount() {
+    return editAccount;
+  }
+
+  public void setEditAccount(String editAccount) {
+    this.editAccount = editAccount;
+  }
+
+  public Date getEditTime() {
+    return editTime;
+  }
+
+  public void setEditTime(Date editTime) {
+    this.editTime = editTime;
+  }
+
+  public String getDeleteAccount() {
+    return deleteAccount;
+  }
+
+  public void setDeleteAccount(String deleteAccount) {
+    this.deleteAccount = deleteAccount;
+  }
+
+  public Date getDeleteTime() {
+    return deleteTime;
+  }
+
+  public void setDeleteTime(Date deleteTime) {
+    this.deleteTime = deleteTime;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/PagerRequestModel.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/PagerRequestModel.java
new file mode 100644
index 0000000..75007e0
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/PagerRequestModel.java
@@ -0,0 +1,42 @@
+package com.supwisdom.leaveschool.proxy.common.model;
+
+import java.io.Serializable;
+import java.util.Map;
+
+public class PagerRequestModel implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 6099787167570502127L;
+
+  private int pageIndex = 0;
+  private int pageSize = 20;
+
+  public int getPageIndex() {
+    return pageIndex;
+  }
+
+  public void setPageIndex(int pageIndex) {
+    this.pageIndex = pageIndex;
+  }
+
+  public int getPageSize() {
+    return pageSize;
+  }
+
+  public void setPageSize(int pageSize) {
+    this.pageSize = pageSize;
+  }
+
+  private Map<String, Object> mapBean;
+
+  public Map<String, Object> getMapBean() {
+    return mapBean;
+  }
+
+  public void setMapBean(Map<String, Object> mapBean) {
+    this.mapBean = mapBean;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/PagerResponseModel.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/PagerResponseModel.java
new file mode 100644
index 0000000..7be5a93
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/common/model/PagerResponseModel.java
@@ -0,0 +1,71 @@
+package com.supwisdom.leaveschool.proxy.common.model;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+public class PagerResponseModel<T> extends PagerRequestModel implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -3449591075961852442L;
+
+  private int currentItemCount;
+  
+  private int pageCount;
+  private long recordCount;
+
+  private Collection<T> items;
+
+  public PagerResponseModel() {
+
+  }
+
+  public PagerResponseModel(PagerRequestModel pagerRequestModel) {
+    super.setPageIndex(pagerRequestModel.getPageIndex());
+    super.setPageSize(pagerRequestModel.getPageSize());
+    super.setMapBean(pagerRequestModel.getMapBean());
+  }
+
+  public static <T> PagerResponseModel<T> of(PagerRequestModel pagerRequestModel) {
+    PagerResponseModel<T> pagerResponseModell = new PagerResponseModel<T>();
+    pagerResponseModell.setPageIndex(pagerRequestModel.getPageIndex());
+    pagerResponseModell.setPageSize(pagerRequestModel.getPageSize());
+    pagerResponseModell.setMapBean(pagerRequestModel.getMapBean());
+
+    return pagerResponseModell;
+  }
+
+  public int getCurrentItemCount() {
+    return currentItemCount;
+  }
+
+  public void setCurrentItemCount(int currentItemCount) {
+    this.currentItemCount = currentItemCount;
+  }
+
+  public int getPageCount() {
+    return pageCount;
+  }
+
+  public void setPageCount(int pageCount) {
+    this.pageCount = pageCount;
+  }
+
+  public long getRecordCount() {
+    return recordCount;
+  }
+
+  public void setRecordCount(long recordCount) {
+    this.recordCount = recordCount;
+  }
+
+  public Collection<T> getItems() {
+    return items;
+  }
+
+  public void setItems(Collection<T> items) {
+    this.items = items;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Group.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Group.java
new file mode 100644
index 0000000..1269f29
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Group.java
@@ -0,0 +1,64 @@
+package com.supwisdom.leaveschool.proxy.user.domain;
+
+import com.supwisdom.leaveschool.proxy.common.domain.ABaseDomain;
+
+public class Group extends ABaseDomain {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 4260326816456622523L;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getMemo() {
+    return memo;
+  }
+
+  public void setMemo(String memo) {
+    this.memo = memo;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Permission.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Permission.java
new file mode 100644
index 0000000..9a47856
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Permission.java
@@ -0,0 +1,64 @@
+package com.supwisdom.leaveschool.proxy.user.domain;
+
+import com.supwisdom.leaveschool.proxy.common.domain.ABaseDomain;
+
+public class Permission extends ABaseDomain {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -8834200833972243635L;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getMemo() {
+    return memo;
+  }
+
+  public void setMemo(String memo) {
+    this.memo = memo;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Role.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Role.java
new file mode 100644
index 0000000..207c3ef
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/Role.java
@@ -0,0 +1,64 @@
+package com.supwisdom.leaveschool.proxy.user.domain;
+
+import com.supwisdom.leaveschool.proxy.common.domain.ABaseDomain;
+
+public class Role extends ABaseDomain {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 5470129732727732514L;
+
+  /**
+   * 代码
+   */
+  private String code;
+
+  /**
+   * 名称
+   */
+  private String name;
+
+  /**
+   * 备注
+   */
+  private String memo;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getMemo() {
+    return memo;
+  }
+
+  public void setMemo(String memo) {
+    this.memo = memo;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/User.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/User.java
new file mode 100644
index 0000000..6298188
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/domain/User.java
@@ -0,0 +1,138 @@
+package com.supwisdom.leaveschool.proxy.user.domain;
+
+import com.supwisdom.leaveschool.proxy.common.domain.ABaseDomain;
+
+public class User extends ABaseDomain {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -151087923960172281L;
+
+  /**
+   * 用户名
+   */
+  private String username;
+
+  /**
+   * 密码
+   */
+  private String password;
+
+  /**
+   * 是否可用,1 可用,0 不可用,默认:1
+   */
+  private Boolean enabled;
+  /**
+   * 账号未过期,1 未过期,0 过期,默认:1
+   */
+  private Boolean accountNonExpired;
+  /**
+   * 账号未锁定,1 未锁定,0 锁定,默认:1
+   */
+  private Boolean accountNonLocked;
+  /**
+   * 密码未过期,1 未过期,0 过期,默认:1
+   */
+  private Boolean credentialsNonExpired;
+
+  /**
+   * 姓名
+   */
+  private String name;
+
+  /**
+   * 状态(1 启用,0 停用)
+   */
+  private String status;
+
+  /**
+   * 登录手机
+   */
+  private String mobile;
+  /**
+   * 登录邮箱
+   */
+  private String email;
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public Boolean getEnabled() {
+    return enabled;
+  }
+
+  public void setEnabled(Boolean enabled) {
+    this.enabled = enabled;
+  }
+
+  public Boolean getAccountNonExpired() {
+    return accountNonExpired;
+  }
+
+  public void setAccountNonExpired(Boolean accountNonExpired) {
+    this.accountNonExpired = accountNonExpired;
+  }
+
+  public Boolean getAccountNonLocked() {
+    return accountNonLocked;
+  }
+
+  public void setAccountNonLocked(Boolean accountNonLocked) {
+    this.accountNonLocked = accountNonLocked;
+  }
+
+  public Boolean getCredentialsNonExpired() {
+    return credentialsNonExpired;
+  }
+
+  public void setCredentialsNonExpired(Boolean credentialsNonExpired) {
+    this.credentialsNonExpired = credentialsNonExpired;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getMobile() {
+    return mobile;
+  }
+
+  public void setMobile(String mobile) {
+    this.mobile = mobile;
+  }
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+}
diff --git a/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/model/SecurityUser.java b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/model/SecurityUser.java
new file mode 100644
index 0000000..798926a
--- /dev/null
+++ b/samples/client/src/main/java/com/supwisdom/leaveschool/proxy/user/model/SecurityUser.java
@@ -0,0 +1,47 @@
+package com.supwisdom.leaveschool.proxy.user.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.supwisdom.leaveschool.proxy.user.domain.Permission;
+import com.supwisdom.leaveschool.proxy.user.domain.Role;
+import com.supwisdom.leaveschool.proxy.user.domain.User;
+
+public class SecurityUser implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -1068580365294859071L;
+
+  private User user;
+
+  private List<Role> roles;
+
+  private List<Permission> permissions;
+
+  public User getUser() {
+    return user;
+  }
+
+  public void setUser(User user) {
+    this.user = user;
+  }
+
+  public List<Role> getRoles() {
+    return roles;
+  }
+
+  public void setRoles(List<Role> roles) {
+    this.roles = roles;
+  }
+
+  public List<Permission> getPermissions() {
+    return permissions;
+  }
+
+  public void setPermissions(List<Permission> permissions) {
+    this.permissions = permissions;
+  }
+
+}