项目标题与描述

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. Redis + Springboot + Mybatis插入数据时redis中uid为空

    原因 插入时数据库的id会自增,bean对象无法自动生成uid 解决 在mybatis的插入方法中添加useGeneratedKeys属性 useGeneratedKeys 对于支持自动生成记录主键的 ...

  2. 基于XML的方式配置AOP

    第一步:把通知类用 bean 标签配置起来 <bean id="txManager" class="com.atguigu.account.utils.Transa ...

  3. Eclipse java项目转Maven项目

    1.右键项目->configure->选择maven->配置maven的pom.xml 2.在src/main下新建java文件,将原来src下的java文件夹拷贝至该目录下: 3. ...

  4. JVM 方法区是否会出现内存溢出?

    JVM 方法区是否会出现内存溢出? 方法区内存溢出的可能性 方法区是 JVM 内存中的一个重要组成部分,存储类的元信息.静态变量和运行时常量池等.尽管它是一个独立的内存区域,但如果内存使用过多,也可能 ...

  5. wpf 代码判断当前是否在设计模式,兼容没有UI线程的限制

    /// <summary> /// 当前是否处于设计模式 /// </summary> bool IsInDesignMode { get { return (bool)Des ...

  6. 解决【Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul】报错问题

    参考: https://blog.csdn.net/weixin_36146275/article/details/77447659

  7. 代码随想录第四天 | Leecode 24. 两两交换链表、19.删除链表的倒数第N个节点、 面试题 02.07. 链表相交、 142.环形链表II

    Leecode 24 两两交换链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: 输入:h ...

  8. 【.NET必读】RabbitMQ 4.0+重大变更!C#开发者必须掌握的6大升级要点

    RabbitMQ 作为一款广受欢迎的消息队列中间件,近年来从 3.x 版本升级到 4.0+,带来了显著的功能增强和架构调整.与此同时,其官方 C# 客户端也从 6.x 版本跃升至 7.0,引入了全新的 ...

  9. python 读写、创建文件

    python中对文件.文件夹(文件操作函数)的操作设计到os模块以及shutil模块 os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作,比如:绝对路径,父路径等 ...

  10. 阿里云手工配置Nginx

    Nginx服务器是网站反向代理,负载均衡,以及动静分离的神器,由于是第一次在阿里云上配置这个,花费了大半天,终于配置成功了.下面简要的介绍下其流程,以备后面又搞忘了.前提是自动装装不上 购买阿里云服务 ...