diff --git a/core/modules/user/lib/Drupal/user/Controller/UserController.php b/core/modules/user/lib/Drupal/user/Controller/UserController.php
new file mode 100644
index 0000000..7d243e6
--- /dev/null
+++ b/core/modules/user/lib/Drupal/user/Controller/UserController.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\Controller\UserController.
+ */
+
+namespace Drupal\user\Controller;
+
+use Symfony\Component\HttpFoundation\RedirectResponse;
+
+/**
+ * Controller routines for user route.
+ */
+class UserController {
+
+  /**
+   * Access callback for path /user.
+   *
+   * Displays user profile if user is logged in, or login form for anonymous
+   * users.
+   *
+   * @return RedirectResponse|array
+   *   Returns either a redirect to the user page or the render
+   *   array of the login form.
+   */
+  function userPage() {
+    global $user;
+    if ($user->uid) {
+      return new RedirectResponse(url('user/' . $user->uid, array('absolute' => TRUE)));
+    }
+    else {
+      return drupal_get_form('user_login_form');
+    }
+  }
+
+}
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 322311f..71ac1eb 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -863,10 +863,7 @@ function user_menu() {
   $items['user'] = array(
     'title' => 'User account',
     'title callback' => 'user_menu_title',
-    'page callback' => 'user_page',
-    'access callback' => TRUE,
-    'file' => 'user.pages.inc',
-    'weight' => -10,
+    'route_name' => 'user_page',
     'menu_name' => 'account',
   );
 
diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc
index 5f0cfab..3dd0d00 100644
--- a/core/modules/user/user.pages.inc
+++ b/core/modules/user/user.pages.inc
@@ -403,19 +403,3 @@ function user_cancel_confirm($account, $timestamp = 0, $hashed_pass = '') {
   }
   throw new AccessDeniedHttpException();
 }
-
-/**
- * Access callback for path /user.
- *
- * Displays user profile if user is logged in, or login form for anonymous
- * users.
- */
-function user_page() {
-  global $user;
-  if ($user->uid) {
-    return new RedirectResponse(url('user/' . $user->uid, array('absolute' => TRUE)));
-  }
-  else {
-    return drupal_get_form('user_login_form');
-  }
-}
diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml
index 409b033..979a4a9 100644
--- a/core/modules/user/user.routing.yml
+++ b/core/modules/user/user.routing.yml
@@ -54,3 +54,11 @@ user_role_delete:
     _form: '\Drupal\user\Form\UserRoleDelete'
   requirements:
     _entity_access: user_role.delete
+
+user_page:
+  pattern: '/user'
+  defaults:
+    _content: '\Drupal\user\Controller\UserController::userPage'
+  requirements:
+    _access: 'TRUE'
+
