随机密码生成器 - 基于Spring Boot的Docker化部署实践

前言

在网络安全日益重要的今天,强密码的使用已成为保护个人信息和账户安全的基本要求。每次修改服务器密码都要想一想设置啥密码,于是就简单做了一个随机密码生成器。

项目简介

随机密码生成器是一个简单易用的Web应用,用于生成安全的随机密码。该工具具有以下特点:

  • 支持自定义密码长度(4-32位)
  • 可选择包含大写字母、小写字母、数字和特殊符号
  • 界面简洁美观,操作直观
  • 支持一键复制生成的密码
  • 响应式设计,支持移动端和桌面端访问

项目架构

整体架构

┌─────────────────────────────────────────────────────────────┐
│                   用户浏览器                          │
└───────────────────┬───────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────┐
│              Docker容器 (tingyu-tool)                │
│  ┌─────────────────────────────────────────────────┐  │
│  │  Spring Boot应用 (8999端口)            │  │
│  │  ┌────────────────────────────────────┐    │  │
│  │  │  前端页面 (Thymeleaf)    │    │  │
│  │  │  - HTML/CSS/JS              │    │  │
│  │  └────────────────────────────────────┘    │  │
│  │  密码生成逻辑 (JavaScript)           │  │
│  └─────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

部署步骤

使用Docker Compose部署方式,我构建了镜像,上传到阿里镜像仓库了,可以直接使用

创建docker-compose.yml

version: '3.8'

services:
  tingyu-tool:
    image: registry.cn-hangzhou.aliyuncs.com/xiaolinzi/mkpwd:1.0
    container_name: mkpwd-tool
    ports:
      - "8999:8999"
    restart: unless-stopped

启动容器

docker-compose up -d

部署过程中的问题与解决方案

问题1:Docker镜像拉取超时

问题描述:
在构建Docker镜像时,遇到以下错误:

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

原因分析:

  • Docker Hub官方镜像源在国内访问速度慢
  • 网络连接不稳定导致下载超时

解决方案:

  1. 配置国内镜像加速器

编辑Docker配置文件:

sudo nano /etc/docker/daemon.json

添加以下内容:

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
  ]
}
  1. 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 验证配置
docker info | grep "Registry Mirrors"

问题2:基础镜像选择

问题描述:
使用openjdk:8-jre-alpine镜像时,由于网络问题无法拉取。

解决方案:
改用本地已有的ubuntu:20.04镜像,在容器内安装OpenJDK 8 JRE。

优势:

  • ubuntu:20.04镜像通常在本地已存在
  • 安装过程更稳定可控
  • 避免了网络依赖问题

使用方法

访问应用

容器启动成功后,通过以下地址访问:

  • 本地访问: http://localhost:8999
  • 远程访问: http://服务器IP:8999

功能使用

  1. 设置密码长度

    • 拖动滑动条选择4-32位密码长度
    • 默认长度为12位
  2. 选择字符类型

    • ☑ 包含大写字母(A-Z)
    • ☑ 包含小写字母(a-z)
    • ☑ 包含数字(0-9)
    • ☐ 包含特殊符号(~!@#$%^&*()_+{}":?><;.,)
  3. 生成密码

    • 点击"生成密码"按钮
    • 生成的密码显示在结果区域
  4. 复制密码

    • 点击结果区域或"复制"按钮
    • 密码自动复制到剪贴板

项目使用JavaScript在前端实现密码生成逻辑,核心代码如下:

// 随机字符生成函数
function getRandomLower() {
    return String.fromCharCode(Math.floor(Math.random() * 26) + 97);
}

function getRandomUpper() {
    return String.fromCharCode(Math.floor(Math.random() * 26) + 65);
}

function getRandomNumber() {
    return String.fromCharCode(Math.floor(Math.random() * 10) + 48);
}

function getRandomSymbol() {
    const symbols = '~!@#$%^&*()_+{}":?><;.,';
    return symbols[Math.floor(Math.random() * symbols.length)];
}

// 密码生成主函数
function generatePassword(length, lower, upper, number, symbol) {
    let generatedPassword = "";
    const typesCount = lower + upper + number + symbol;
    const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(item => Object.values(item)[0]);
    
    if (typesCount === 0) {
        return "";
    }
    
    for (let i = 0; i < length; i++) {
        typesArr.forEach(type => {
            const funcName = Object.keys(type)[0];
            generatedPassword += randomFunc[funcName]();
        });
    }
    
    return generatedPassword.slice(0, length);
}

安全建议

  1. 密码长度:建议使用至少12位密码
  2. 字符组合:建议包含大小写字母、数字和特殊符号
  3. 定期更换:重要账户建议每3-6个月更换密码
  4. 避免重复:不要在不同网站使用相同密码
  5. 使用密码管理器:推荐使用LastPass、1Password等专业工具

参考资源

关于作者

本文基于实际部署经验编写,如有问题欢迎交流讨论。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐