1. Въведение
В този урок ще конфигурираме Maven да работи зад прокси - често срещана ситуация в среди, в които не се свързваме директно с интернет.
В нашия пример нашият прокси работи на машината 'proxy.baeldung.com' и той слуша прокси заявки чрез HTTP на порт '80'. Също така ще използваме някои вътрешни сайтове на internal.baeldung.com, където не е необходимо да преминаваме през прокси сървър.
2. Конфигурация на прокси
Първо, нека настроим основна прокси конфигурация без никакви идентификационни данни .
Нека редактираме Maven settings.xml, който обикновено се намира в директорията ' /.m2' . Ако все още няма такъв, тогава можем да го копираме от глобалните настройки в директорията ' / conf' .
А сега нека създадем a влизане вътре в
proxy.baeldung.com 80
Тъй като използваме и локален сайт, който не трябва да минава през прокси, нека го посочим в използвайки '|' отделен списък с нашия localhost:
internal.baeldung.com|localhost|127.*|[::1]
3. Добавяне на идентификационни данни
Ако нашият прокси не беше защитен, това е всичко, от което се нуждаем; нашата обаче е, така че нека добавим нашите идентификационни данни към дефиницията на прокси :
baeldung changeme
Не добавяме записи на потребителско име / парола, ако не ни трябват - дори празни - тъй като присъствието им, когато проксито не ги иска, може да доведе до отказ на нашите заявки.
Нашата минимална удостоверена конфигурация сега трябва да изглежда така:
proxy.baeldung.com 80 baeldung changeme internal.baeldung.com|localhost|127.*|[::1]
Сега, когато изпълним командата mvn , ще преминем през проксито, за да се свържем със сайтовете, които търсим.
3.1. Незадължителни записи
Нека му дадем незадължителния идентификатор на „BaeldungProxy_Authenticated“, за да улесним препращането, в случай че някога се наложи да сменим прокситата:
BaeldungProxy_Authenticated
Сега, ако имаме друг прокси, можем да добавим друга дефиниция на прокси, но само един може да бъде активен. По подразбиране Maven ще използва първата активна дефиниция на прокси, която намери .
Дефинициите на прокси са активни по подразбиране и получават неявната дефиниция:
true
Ако искахме да направим друг прокси активен, тогава щяхме да деактивираме първоначалния си запис чрез настройка към false:
false
Стойността по подразбиране на Maven за протокола на проксито е HTTP , което е подходящо за повечето случаи. Ако нашият прокси използва различен протокол, ние ще го декларираме тук и ще заменим http с протокола, от който се нуждае нашият прокси:
http
Имайте предвид, че това е протоколът, който проксито използва - протоколът на нашите заявки (ftp: //, //, //) е независим от това.
И ето как изглежда нашата разширена дефиниция на прокси , включително незадължителните елементи:
BaeldungProxy_Authenticated true http proxy.baeldung.com 80 baeldung changeme internal.baeldung.com|localhost|127.*|[::1]
И така, това е всичко за нашия основен прокси вход, но достатъчно ли е сигурно за нас?
4. Осигуряване на нашата конфигурация
Да кажем, че някой от нашите колеги иска да им изпратим нашата конфигурация на прокси сървър.
Не сме много запалени по изпращането на нашата парола в обикновен текст, така че нека видим колко лесно Maven улеснява криптирането на нашите пароли .
4.1. Създаване на главна парола
Първо, нека изберете главна парола, кажете „te! St! Ma $ ter“.
Сега нека шифроваме нашата главна парола , като я въведем в подканата, когато стартираме:
mvn --encrypt-master-password Master Password:
След като натиснем enter, виждаме нашата криптирана парола, затворена между къдрави скоби:
{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}
4.2. Отстраняване на неизправности при генериране на пароли
Ако виждаме {} вместо главната парола: ред (това може да се случи при използване на bash), тогава ще трябва да посочим паролата в командния ред.
Нека увием паролата в кавички, за да сме сигурни, че има специални символи като „!“ нямат нежелани ефекти.
Така че, нека използваме единични кавички, ако използваме bash:
mvn --encrypt-master-password 'te!st!ma$ter'
Или използвайте двойни кавички, ако използвате командния ред на Windows:
mvn --encrypt-master-password "te!st!ma$ter"
Сега, понякога генерираната ни главна парола съдържа фигурни скоби , като този пример със затваряща къдрава скоба, '}', след 'UD':
{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}
В този случай можем:
- стартирайте командата mvn –encrypt-master-password отново, за да генерирате друга (надяваме се без къдрава скоба)
- избягайте от къдравите скоби в нашата парола, като добавите обратна наклонена черта пред '{' или ' }'
4.3. Създаване на файл с настройки-security.xml
Сега нека поставим нашата криптирана парола с избягала \ \} във файл, наречен settings-security.xml файл в нашата директория .m2 :
{QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}
И накрая, Maven ни позволява да добавим коментар вътре в основния елемент.
Нека добавим малко текст преди разделителя на паролата „{“, като внимаваме да не използваме {или} в нашия коментар, тъй като Maven ги използва, за да намери нашата парола:
We escaped the curly brace with '\' {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}
4.4. Използване на сменяемо устройство
Да приемем, че трябва да сме допълнително защитени и да искаме да съхраняваме главната си парола на отделно устройство .
Първо ще поставим нашия файл settings-security.xml в конфигурационна директория на сменяемо устройство, „R:“:
R:\config\settings-security.xml
И сега ще актуализираме файла settings-security.xml в нашата директория .m2, за да пренасочим Maven към нашите реални настройки-security.xml на нашето сменяемо устройство:
R:\config\settings-security.xml
Maven сега ще прочете нашата криптирана главна парола от файла, който посочихме в елемента за преместване , на нашето сменяемо устройство.
5. Шифроване на прокси пароли
Сега имаме кодирана основна парола, можем да шифроваме нашата прокси парола .
Нека изпълним следната команда и въведем нашата парола, " changeme", в подканата:
mvn --encrypt-password Password:
Показва се нашата криптирана парола:
{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}
Последната ни стъпка е да редактираме прокси секцията в нашия файл settings.xml и да въведем нашата криптирана парола :
BaeldungProxy_Encrypted proxy.baeldung.com 80 baeldung {U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}
Запазете това и Maven вече трябва да може да се свързва с интернет чрез нашия прокси, като използва нашите криптирани пароли.
6. Използване на системни свойства
Въпреки че конфигурирането на Maven чрез файла с настройки е препоръчителният подход , бихме могли да декларираме нашата прокси конфигурация чрез Java System Properties.
Ако нашата операционна система вече има конфигуриран прокси, можем да зададем:
-Djava.net.useSystemProxies=true
Като алтернатива, за да бъде винаги активирана, ако имаме права на администратор, можем да зададем това в нашия /lib/net.properties файл.
Нека обаче отбележим, че въпреки че самият Maven може да спазва тази настройка, не всички приставки го правят, така че все пак може да получим неуспешни връзки, използвайки този метод.
Дори когато е активиран, можем да го заменим, като зададем подробности за нашия HTTP прокси в системното свойство http.proxyHost :
-Dhttp.proxyHost=proxy.baeldung.com
Нашият прокси слуша на порт 8080 по подразбиране, но ако слуша на порт 8080, щяхме да конфигурираме свойството http.proxyPort :
-Dhttp.proxyPort=8080
А за нашите сайтове, които не се нуждаят от прокси :
-Dhttp.nonLocalHosts="internal.baeldung.com|localhost|127.*|[::1]"
Така че, ако нашият прокси е на 10.10.0.100, можем да използваме:
mvn compile -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost|127.0.0.1
Разбира се, ако нашият прокси изисква удостоверяване , ние също ще добавим :
-Dhttp.proxyUser=baeldung -Dhttp.proxyPassword=changeme
И ако искахме някои от тези настройки да се прилагат за всички наши Maven извиквания, можем да ги дефинираме в променливата на средата MAVEN_OPTS:
set MAVEN_OPTS= -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080
Сега, когато стартираме ' mvn ', тези настройки ще се прилагат автоматично - докато излезем.
7. Заключение
В тази статия конфигурирахме прокси на Maven с и без идентификационни данни и криптирахме нашата парола. Видяхме как да съхраняваме нашата главна парола на външно устройство и също така разгледахме конфигурирането на проксито чрез използване на системни свойства.
Сега можем да споделяме нашия файл settings.xml с нашите колеги, без да им даваме паролите си в обикновен текст, и да им показваме как да криптират техните!
Както обикновено, примерите в тази статия са достъпни в GitHub.