项目标题与描述

Alovoa是一个旨在成为首个广泛使用的免费开源约会网络平台。与其他平台不同,Alovoa具有以下核心价值:

  • 无广告
  • 不出售用户数据
  • 无付费功能(无"付费超级喜欢"、"付费滑动"、"付费查看资料"或"付费开始聊天")
  • 安全的服务器
  • 完全开源
  • 提供高级筛选功能避免看到不想见的人
  • 最隐私的数据采用安全加密

功能特性

核心功能

  • 用户注册与认证系统
  • 个人资料管理(包括图片、音频、个人描述等)
  • 基于地理位置和兴趣的匹配系统
  • 实时聊天功能
  • 验证码系统防止滥用
  • 管理员后台管理
  • 多语言支持
  • 响应式设计支持移动端

安全特性

  • 端到端文本加密
  • 验证码保护关键操作
  • 敏感数据加密存储
  • GDPR合规设计
  • 账户删除功能

技术亮点

  • 基于Spring Boot的后端架构
  • JPA/Hibernate数据持久层
  • Spring Security安全框架
  • RESTful API设计
  • 支持Docker部署
  • 支持MariaDB数据库

安装指南

系统要求

  • Java 17+
  • Maven
  • MariaDB数据库
  • 邮件服务器

本地开发环境安装

  1. 安装OpenJDK 17
  2. 安装Maven
  3. 设置MariaDB数据库
  4. 配置邮件服务器
  5. 在application.properties中配置数据库、邮件服务器和加密密钥
  6. 执行mvn install

Docker部署

docker-compose build
docker-compose up -d
docker-compose logs -f

数据库设置

# 开发数据库
mysql -uroot -e "CREATE DATABASE alovoa DEFAULT CHARACTER SET utf8"
mysql -uroot -e "CREATE USER 'alovoa'@'localhost' IDENTIFIED BY 'alovoa'"
mysql -uroot -e "GRANT ALL PRIVILEGES ON alovoa.* TO 'alovoa'@'localhost'" # 测试数据库
mysql -uroot -e "CREATE DATABASE alovoa_test DEFAULT CHARACTER SET utf8"
mysql -uroot -e "CREATE USER 'alovoa_test'@'localhost' IDENTIFIED BY 'alovoa_test'"
mysql -uroot -e "GRANT ALL PRIVILEGES ON alovoa_test.* TO 'alovoa_test'@'localhost'"

使用说明

API使用示例

获取验证码

@RestController
@RequestMapping("/captcha")
public class CaptchaController {
@Autowired
private CaptchaService captchaService; @GetMapping("/generate")
public Captcha generate() throws NoSuchAlgorithmException, IOException {
return captchaService.generate();
}
}

用户注册

@RestController
@RequestMapping("/")
public class RegisterController {
@Autowired
private RegisterService registerService; @PostMapping(value = "/register", consumes = "application/json")
public void register(@RequestBody RegisterDto dto) throws Exception {
registerService.register(dto);
}
}

搜索用户

@Controller
@RequestMapping("/search")
public class SearchController {
@Autowired
private SearchService searchService; @GetMapping("/users/default")
public String getUsersDefault(Model model) throws Exception {
model.addAttribute("dto", searchService.searchComplete());
return "fragments :: search-users";
}
}

核心代码

应用主入口

@SpringBootApplication
@EnableJpaRepositories("com.nonononoki.alovoa.repo")
@EntityScan("com.nonononoki.alovoa.entity")
@EnableCaching
@EnableScheduling
public class AlovoaApplication {
public static void main(String[] args) {
Security.addProvider(new BouncyCastleProvider());
SpringApplication.run(AlovoaApplication.class, args);
}
}

用户实体类

@Entity
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; @Column(nullable = false, unique = true)
@Convert(converter = TextEncryptorConverter.class)
@JsonIgnore
private String email; @JsonIgnore
private String password; @Convert(converter = TextEncryptorConverter.class)
private String firstName; private String description;
private int units;
private boolean showZodiac;
private int preferedMinAge;
private int preferedMaxAge; // 其他字段和方法...
}

文本加密转换器

@Component
public class TextEncryptorConverter implements AttributeConverter<String, String> {
@Value("${app.text.key}")
private String key; @Value("${app.text.salt}")
private String salt; private static final String TRANSFORMATION = "AES/CBC/PKCS5PADDING"; @Override
public String convertToDatabaseColumn(String attribute) {
try {
return encode(attribute);
} catch (Exception e) {
throw new DatabaseRuntimeException(e);
}
} private String encode(String attribute) throws Exception {
if(attribute == null) return null;
byte[] ba = getEnCipher().doFinal(attribute.getBytes(StandardCharsets.UTF_8));
return Base64.getUrlEncoder().encodeToString(ba);
}
// 其他方法...
}

验证码服务

@Service
public class CaptchaService {
@Autowired
private CaptchaRepository captchaRepo; public Captcha generate() throws NoSuchAlgorithmException, IOException {
OxCaptcha ox = generateCaptchaImage();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(ox.getImage(), "webp", baos);
byte[] ba = baos.toByteArray();
String encoded = Base64.getEncoder().encodeToString(ba); Captcha captcha = new Captcha();
captcha.setImage(encoded);
captcha.setText(ox.getText());
return captchaRepo.saveAndFlush(captcha);
}
// 其他方法...
}

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)

公众号二维码

Alovoa - 开源隐私优先的约会平台的更多相关文章

  1. ArtiPub:一款开源的一文多发平台

    文章来自我的博客:https://blog.ljyngup.com/archives/705.html/ 看到感觉挺有意思的,有空找个空闲的VPS搭建一下. 转自官方Github仓库 ArtiPub ...

  2. 基于 Markdown 的开源的 Node.js 知识库平台

    Raneto 是一个免费,开源的 Node.js 知识库平台,基于静态 Markdown 文件实现. Raneto 可以被称为静态网站生成器,因为它并不需要数据库支持.所有的内容都存储在 Markdo ...

  3. 国内外开源与 SaaS ,团队协作平台、项目管理工具整理

    整理一些开源与 SaaS ,团队协作平台.项目管理工具.还有哪些比较好的工具,可以推荐下? 名称 地址 备注 asana https://asana.com/ 国外 basecamp https:// ...

  4. AEAI ESB V3.5.4开源发布,应用集成平台

    AEAI ESB 应用集成平台为数通畅联的核心产品,本着分享传递的理念,数通畅联将ESB管理控制台项目开源,目的在于满足客户与伙伴的OEM需求,以及为广大IT爱好者的集成工具提供多一种选择,多一种便利 ...

  5. JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台

    JeeSite本身是以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Ehcahe对常用数据进行缓 ...

  6. Github开源项目(企业信息化基础平台)

    JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...

  7. SpringBoot开源项目(企业信息化基础平台)

    JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...

  8. ERP开源框架 + 二次开发平台 介绍

    经历了多年软件开发,深受网络大侠们的资源共享才得以有所成绩, 本人主要是做企业ERP软件,一直有个感受,开发具体某个功能不难,但随着需求的增加,管理庞大的代码却成了最大的问题 而为企业管理所做的开发, ...

  9. kettle系列-我的开源kettle调度、管理平台[kettle-manager]介绍

    kettle管理工具 专门为kettle这款优秀的ETL工具开发的web端调度.管理工具. 新版本 项目简介 kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操 ...

  10. OpenNESS,开源的边缘网络服务平台

    目录 文章目录 目录 参考文章 OpenNESS 的电梯间演讲 OpenNESS 与 ETSI MEC Edge Controller Software 的功能清单 Edge Platform Sof ...

随机推荐

  1. 方法重写-java se 进阶-day01

    1.方法重写的介绍 当子父类中,某方法存在相同的定义(方法名.参数.返回值)时,子类的方法会将父类的方法进行重写操作(覆盖) 2.方法重写与方法重载的区别 1.方法重载:又称Overload,在同一个 ...

  2. String类的特点

    1.String类的特点 1.java程序中,只要是双引号字符串,就都是String类的对象 如图 只有String这一个类有这种特殊的创建对象方法 我们知道,只有对象才可以通过 点什么来调用方法,而 ...

  3. 【Ubuntu】安装OpenSSH启用远程连接

    [Ubuntu]安装OpenSSH启用远程连接 零.安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server 壹.启动服务 使用如下代码启动Op ...

  4. Postman+Newman生成接口测试报告

    1.安装node 安装完后进入cmd输入node检验版本 2.安装newman 打开cmd-->输入npm install -g newman,然后输入newman -v验证版本 3.安装htm ...

  5. 将本地库上传到 GitHub

    4.4.1 上传本地库 在 GitHub 网站上创建仓库 复制仓库地址 在 Idea 中的模块上右键 设置远程地址别名 点击 Push 推送到 GitHub 仓库 上传成功 4.4.2 正常情况下是合 ...

  6. elemengui分页

    <!-- 分页模块 --> <template> <div class="block" style="margin-top:20px&quo ...

  7. python,数据拼接举例

    request请求参数data =  '{"TwitterId":123456,"SupperId":0}' data内的123456,实际是个变量,且数据来源 ...

  8. 在 MySQL 中建索引时需要注意哪些事项?

    在 MySQL 中建索引时需要注意哪些事项 索引在 MySQL 中是提升查询性能的关键,但不当的索引设计可能会导致性能下降或资源浪费.因此,在建索引时需要综合考虑性能.存储成本和业务需求. 1. 确定 ...

  9. 【一步步开发AI运动APP】八、自定义姿态动作识别检测——之姿态相似度比较

    之前我们为您分享了[一步步开发AI运动小程序]开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身.线上运动赛事.AI学生体测.美体.康复锻炼等应用场景的AI运动小程序:为了帮助开发者继 ...

  10. 记录一次mysql数据库修复过程

    1. 场景 最近在使用小皮面板进行靶场搭建的时候,发现数据库一直无法启动,而在虚拟机里是可以启动了,这就很奇怪了.意识到我的本地已经安装了mysql,可能产生了冲突,但是当我兴冲冲启动本地mysql的 ...