仓库认证与安全
私有仓库需要认证,敏感凭据不应写入 pom.xml。
认证配置位置
安全原则
| 配置位置 | 推荐 | 说明 |
|---|---|---|
| pom.xml | 不推荐 | 会暴露在版本库 |
| settings.xml | 推荐 | 仅本地存储 |
| 环境变量 | 推荐 | 不写文件 |
settings.xml 配置认证
基本配置
XML
<settings>
<servers>
<server>
<id>nexus-releases</id> <!-- 对应 repository id -->
<username>admin</username>
<password>password123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>password123</password>
</server>
</servers>
</settings>
server 元素说明
| 元素 | 说明 |
|---|---|
| id | 对应 repository 或 snapshotRepository 的 id |
| username | 登录用户名 |
| password | 登录密码 |
POM 仓库声明
XML
<distributionManagement>
<repository>
<id>nexus-releases</id> <!-- 与 server id 对应 -->
<url>https://nexus.company.com/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id> <!-- 与 server id 对应 -->
<url>https://nexus.company.com/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
id 必须与 settings.xml 中 server 的 id 一致。
密码加密
加密步骤
Bash
# 1. 创建加密主密码
mvn --encrypt-master-password masterpassword
输出:{jSMOWOXYRHV2pGcC}
配置主密码
settings-security.xml:
XML
<settingsSecurity>
<master>{jSMOWOXYRHV2pGcC}</master>
</settingsSecurity>
加密实际密码
Bash
mvn --encrypt-password password123
输出:{O8U5srA=}
使用加密密码
XML
<server>
<id>nexus</id>
<username>admin</username>
<password>{O8U5srA=}</password>
</server>
访问控制类型
| 类型 | 说明 |
|---|---|
| 用户名密码 | 基础认证 |
| Token | 更安全,可撤销 |
| SSH Key | Git 类型仓库 |
Token 认证示例
XML
<server>
<id>github</id>
<configuration>
<githubToken>${env.GITHUB_TOKEN}</githubToken>
</configuration>
</server>
权限控制
Nexus 权限模型
XML
用户 → 角色 → 权限 → 仓库
典型权限
| 权限 | 说明 |
|---|---|
| read | 查看下载 |
| write | 上传发布 |
| delete | 删除构件 |
| admin | 管理配置 |
发布认证示例
settings.xml
XML
<settings>
<servers>
<server>
<id>releases</id>
<username>deployer</username>
<password>deploy-pass</password>
</server>
<server>
<id>snapshots</id>
<username>deployer</username>
<password>deploy-pass</password>
</server>
</servers>
</settings>
pom.xml
Bash
<distributionManagement>
<repository>
<id>releases</id>
<url>https://nexus.company.com/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>https://nexus.company.com/snapshots</url>
</snapshotRepository>
</distributionManagement>
发布命令
XML
mvn deploy
安全最佳实践
推荐做法
| 做法 | 说明 |
|---|---|
| 不在 pom.xml 写密码 | 避免暴露到版本库 |
| 使用加密密码 | settings-security.xml |
| 使用 Token | 比密码更安全 |
| 最小权限原则 | 仅授予必要权限 |
| 定期更换密码 | 降低泄露风险 |
环境变量认证
Bash
<server>
<id>nexus</id>
<username>${env.NEXUS_USER}</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
text
export NEXUS_USER=admin
export NEXUS_PASSWORD=password
mvn deploy
要点总结
- 认证配置在 settings.xml 的 servers 元素
- id 必须与 repository 的 id 对应
- 不在 pom.xml 写密码,避免暴露
- 使用 mvn --encrypt-password 加密密码
- 最小权限原则,定期更换凭据
- 可使用环境变量存储敏感信息
📝 发现内容有误?点击此处直接编辑