diff --git a/pom.xml b/pom.xml
index 9010515..6f864f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,6 +91,7 @@
   <properties>
     <mavenVersion>3.0</mavenVersion>
     <doxiaVersion>1.9</doxiaVersion>
+    <jettyVersion>9.2.28.v20190418</jettyVersion>
     <pluginTestingVersion>2.1</pluginTestingVersion>
     <javaVersion>7</javaVersion>
   </properties>
@@ -192,7 +193,7 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
-      <version>3.2.0</version>
+      <version>3.3.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
@@ -314,6 +315,25 @@
       <scope>provided</scope>
     </dependency>
 
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-server</artifactId>
+      <version>${jettyVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-servlet</artifactId>
+      <version>${jettyVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-webapp</artifactId>
+      <version>${jettyVersion}</version>
+      <scope>test</scope>
+    </dependency>
+
   </dependencies>
 
   <build>
@@ -334,6 +354,11 @@
               <exclude>src/it/projects/tree-multimodule/module-a/expected.txt</exclude>
               <exclude>src/it/projects/tree-multimodule/module-b/expected.txt</exclude>
               <exclude>src/it/projects/tree-verbose/expected.txt</exclude>
+              <!--
+                These files contain real repository artifacts.
+              -->
+              <exclude>src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1</exclude>
+              <exclude>src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1</exclude>
             </excludes>
           </configuration>
         </plugin>
diff --git a/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java b/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
index d434e64..420c71b 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
@@ -41,6 +41,8 @@
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.settings.Settings;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
@@ -71,8 +73,8 @@
     private ArtifactResolver artifactResolver;
 
     /**
-    *
-    */
+     *
+     */
     @Component
     private DependencyResolver dependencyResolver;
 
@@ -85,6 +87,12 @@
     @Component( role = ArtifactRepositoryLayout.class )
     private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
 
+    /**
+     * The repository system.
+     */
+    @Component
+    private RepositorySystem repositorySystem;
+
     private DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
 
     /**
@@ -214,6 +222,11 @@
             ProjectBuildingRequest buildingRequest =
                 new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
 
+            Settings settings = session.getSettings();
+            repositorySystem.injectMirror( repoList, settings.getMirrors() );
+            repositorySystem.injectProxy( repoList, settings.getProxies() );
+            repositorySystem.injectAuthentication( repoList, settings.getServers() );
+
             buildingRequest.setRemoteRepositories( repoList );
 
             if ( transitive )
diff --git a/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java b/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
index bd56c6d..e4da366 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
@@ -20,13 +20,27 @@
  */
 
 import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.LegacySupport;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.eclipse.jetty.security.ConstraintMapping;
+import org.eclipse.jetty.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.security.HashLoginService;
+import org.eclipse.jetty.security.LoginService;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.ResourceHandler;
+import org.eclipse.jetty.util.security.Constraint;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 import org.sonatype.aether.util.DefaultRepositorySystemSession;
 
@@ -48,7 +62,14 @@
         assertNotNull( mojo );
 
         LegacySupport legacySupport = lookup( LegacySupport.class );
-        legacySupport.setSession( newMavenSession( new MavenProjectStub() ) );
+        MavenSession session = newMavenSession( new MavenProjectStub() );
+        Settings settings = session.getSettings();
+        Server server = new Server();
+        server.setId( "myserver" );
+        server.setUsername( "foo" );
+        server.setPassword( "bar" );
+        settings.addServer( server );
+        legacySupport.setSession( session );
         DefaultRepositorySystemSession repoSession =
             (DefaultRepositorySystemSession) legacySupport.getRepositorySession();
         repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( testDir.getAbsolutePath() ) );
@@ -97,6 +118,31 @@
     }
 
     /**
+     * Test remote repositories parameter with basic authentication
+     *
+     * @throws Exception in case of errors
+     */
+    public void testRemoteRepositoriesAuthentication()
+        throws Exception
+    {
+        org.eclipse.jetty.server.Server server = createServer();
+        try {
+            server.start();
+
+            setVariableValueToObject( mojo, "remoteRepositories", "myserver::default::" + server.getURI() );
+            mojo.setGroupId( "test" );
+            mojo.setArtifactId( "test" );
+            mojo.setVersion( "1.0" );
+
+            mojo.execute();
+        }
+        finally
+        {
+            server.stop();
+        }
+    }
+
+    /**
      * Test parsing of the remote repositories parameter
      * 
      * @throws Exception in case of errors
@@ -150,4 +196,49 @@
             // expected
         }
     }
+
+    private ContextHandler createContextHandler()
+    {
+        ResourceHandler resourceHandler = new ResourceHandler();
+        Path resourceDirectory = Paths.get( "src", "test", "resources", "unit", "get-test", "repository" );
+        resourceHandler.setResourceBase( resourceDirectory.toString() );
+        resourceHandler.setDirectoriesListed( true );
+
+        ContextHandler contextHandler = new ContextHandler( "/maven" );
+        contextHandler.setHandler( resourceHandler );
+        return contextHandler;
+    }
+
+    private org.eclipse.jetty.server.Server createServer()
+    {
+        org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server( 0 );
+        server.setStopAtShutdown( true );
+
+        LoginService loginService = new HashLoginService( "myrealm",
+            "src/test/resources/unit/get-test/realm.properties" );
+        server.addBean( loginService );
+
+        ConstraintSecurityHandler security = new ConstraintSecurityHandler();
+        server.setHandler( security );
+
+        Constraint constraint = new Constraint();
+        constraint.setName( "auth" );
+        constraint.setAuthenticate( true );
+        constraint.setRoles(new String[]{ "userrole" });
+
+        ConstraintMapping mapping = new ConstraintMapping();
+        mapping.setPathSpec( "/*" );
+        mapping.setConstraint( constraint );
+
+        security.setConstraintMappings( Collections.singletonList( mapping ) );
+        security.setAuthenticator( new BasicAuthenticator() );
+        security.setLoginService( loginService );
+
+        ContextHandler contextHandler = createContextHandler();
+        contextHandler.setServer( server );
+
+        security.setHandler( contextHandler );
+        server.setHandler( security );
+        return server;
+    }
 }
diff --git a/src/test/resources/unit/get-test/realm.properties b/src/test/resources/unit/get-test/realm.properties
new file mode 100644
index 0000000..e616630
--- /dev/null
+++ b/src/test/resources/unit/get-test/realm.properties
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# username: password[,rolename ...]
+foo: bar,userrole
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar
new file mode 100644
index 0000000..fdf53e9
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar
Binary files differ
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1 b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1
new file mode 100644
index 0000000..e1d138a
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1
@@ -0,0 +1 @@
+cd6c154c2c15ff5d75bd15c62388db0057ce5598
\ No newline at end of file
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom
new file mode 100644
index 0000000..1add1ce
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>test</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <properties>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+</project>
\ No newline at end of file
diff --git a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1 b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1
new file mode 100644
index 0000000..5dab4ca
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1
@@ -0,0 +1 @@
+fc2169034b2608b4cee1fd4af9bb0aa11c948fac
\ No newline at end of file
