diff --git a/samples/user/pom.xml b/samples/user/pom.xml
index 33eb022..23bbb2e 100644
--- a/samples/user/pom.xml
+++ b/samples/user/pom.xml
@@ -53,11 +53,6 @@
 
     <dependency>
       <groupId>com.supwisdom.infras</groupId>
-      <artifactId>infras-security</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.supwisdom.infras</groupId>
       <artifactId>infras-mvc</artifactId>
     </dependency>
 
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java
index c0242c3..9e287d4 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/controller/api/demo/ApiDemoUserController.java
@@ -11,6 +11,8 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.supwisdom.leaveschool.user.util.AuthUtil;
+
 @RestController
 @RequestMapping("/api/demo/users")
 public class ApiDemoUserController {
@@ -25,6 +27,8 @@
    */
   @GetMapping(path = "/greeting/{name}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   public Map<String, Object> greeting(@PathVariable("name") String name) {
+    AuthUtil.getRemoteUser();
+    
     logger.debug(name);
     Map<String, Object> result = new HashMap<String, Object>();
     result.put("message", "Good " + name);
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java
index 86d6e84..5bcc1e3 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserRepository.java
@@ -12,7 +12,7 @@
 import org.springframework.stereotype.Repository;
 
 import com.supwisdom.leaveschool.user.domain.User;
-import com.supwisdom.leaveschool.user.util.AuthenticationUtil;
+import com.supwisdom.leaveschool.user.util.AuthUtil;
 
 @Repository
 public interface UserRepository extends JpaRepository<User, String> {
@@ -60,7 +60,7 @@
     }
     
     entity.setDeleted(false);
-    entity.setAddAccount(AuthenticationUtil.currentUsername());
+    entity.setAddAccount(AuthUtil.getRemoteUser());
     entity.setAddTime(Calendar.getInstance().getTime());
     
     User e = this.save(entity);
@@ -70,7 +70,7 @@
   
   public default User update(User entity) {
     
-    entity.setEditAccount(AuthenticationUtil.currentUsername());
+    entity.setEditAccount(AuthUtil.getRemoteUser());
     entity.setEditTime(Calendar.getInstance().getTime());
     
     User e = this.save(entity);
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/AuthenticationUtil.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/AuthUtil.java
similarity index 61%
rename from samples/user/src/main/java/com/supwisdom/leaveschool/user/util/AuthenticationUtil.java
rename to samples/user/src/main/java/com/supwisdom/leaveschool/user/util/AuthUtil.java
index 24368cb..29366aa 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/AuthenticationUtil.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/util/AuthUtil.java
@@ -1,37 +1,56 @@
 package com.supwisdom.leaveschool.user.util;
 
+import java.util.Enumeration;
+
+import javax.servlet.http.HttpServletRequest;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
-public class AuthenticationUtil {
+public class AuthUtil {
 
-  private static final Logger logger = LoggerFactory.getLogger(AuthenticationUtil.class);
+  private static final Logger logger = LoggerFactory.getLogger(AuthUtil.class);
 
-  public static String currentUsername() {
+  public static String getRemoteUser() {
     
-    /*
     if (RequestContextHolder.getRequestAttributes() != null) {
       ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
       if (servletRequestAttributes != null) {
         HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
         if (httpServletRequest != null) {
           String remoteUser = httpServletRequest.getRemoteUser();
-          logger.debug("httpServletRequest.getRemoteUser(): ", remoteUser);
+          logger.debug("httpServletRequest.getRemoteUser(): {}", remoteUser);
+          
+          if (remoteUser == null || remoteUser.isEmpty()) {
+            remoteUser = httpServletRequest.getHeader("remote_user");
+            logger.debug("remote_user: {}", remoteUser);
+          }
           
           if (remoteUser != null) {
             return remoteUser;
           }
+
+          if (logger.isDebugEnabled()) {
+            logger.debug("request headers: ");
+            Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
+            while(headerNames.hasMoreElements()) {
+              String headerName = headerNames.nextElement();
+              logger.debug("{}: {}", headerName, httpServletRequest.getHeader(headerName));
+            }
+            logger.debug("request headers: ");
+          }
+          
         }
       }
     }
-    */
     
     //logger.warn("FIXME: currentUsername. return 'user' by default.");
     //return "user";  // FIXME: currentUsername
-    //throw new RuntimeException("exception.authentication.remote.user.must.not.empty");
+    throw new RuntimeException("exception.authentication.remote.user.must.not.empty");
 
+    /*
     Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
 
     if (authentication == null) {
@@ -62,6 +81,7 @@
     
 
     return null;
+    */
   }
 
 }
