Prechádzať zdrojové kódy

optimize:update readme

ggbocoder 2 rokov pred
rodič
commit
3156fdbd1b

+ 30 - 0
README.md

@@ -1,4 +1,34 @@
 # FdroidRepository
+## 主要功能
+
+- 基于邮件激活的注册方式
+- 基于MD5加密与加盐的密码存储方式
+- 登录功能包括随机验证码的验证
+- 登录状态检查,为游客和已登录用户展示不同界面与功能
+- 不同用户的权限控制和网站数据统计(UV、DAU)
+- 管理员可以查看网站数据统计和网站监控信息
+- 用户上传头像
+- 发布帖子、评论帖子、热帖排行、发送私信与敏感词过滤等功能
+- 点赞、关注与系统通知功能
+- 全局搜索帖子信息的功能
+
+## 核心功能实现
+
+- 使用无状态的jwt进行鉴权
+- 使用Spring Security实现权限控制,解决HTTP无状态的缺陷
+- 使用ThreadLocal存储用户数据,代替Session,便于分布式部署
+- 使用Redis集合数据类型解决踩赞、相互关注功能,保证数据正确性。使用Redis的ZSet保存关注列表
+- Redis的HyperLogLog存储每日UV、Bitmap存储DAU,实现网站数据统计
+- 使用Kafka作为消息队列,实现系统通知和解耦
+- 使用Elasticsearch + IK分词插件实现全局搜索功能
+- 使用分布式定时任务Quartz定时计算帖子分数,实现热帖排行
+- Caffeine本地缓存 + Redis分布式缓存的多级缓存,提高服务器性能
+
+## TODO
+- 使用布隆过滤器屏蔽拉黑的ip下载应用
+- 使用Redis实现一致性哈希算法,使用Redis的ZSet实现用户综合评分
+- 使用kafka收集用户下载app量,使用kafka解耦构建流水线,当流水线构建完毕时通过kafka将消息通知到邮箱
+- 加快下载速度,断点
 
 ## 评论点赞设计
 - 用Redis的set结构存储点赞情况,key:postId,value:set<userId>

+ 1 - 1
src/main/java/cn/seecoder/fdroidrepository/Controller/ForumPostController.java

@@ -14,7 +14,7 @@ import java.util.Date;
 import java.util.List;
 
 @RestController
-@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_ADMIN')" )
+//@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_ADMIN')" )
 @RequestMapping("/api/forum")
 public class ForumPostController {
     @Autowired

+ 3 - 3
src/main/java/cn/seecoder/fdroidrepository/Controller/UserController.java

@@ -36,12 +36,12 @@ public class UserController {
     private AuthenticationManager authenticationManager;
 
     @PostMapping("/register")
-    public ResponseEntity<String> register(@RequestBody User user) {
+    public SingleResult<?> register(@RequestBody User user) {
         if (!userService.isUsernameUnique(user.getUsername())) {
-            return new ResponseEntity<>("Username is already taken", HttpStatus.BAD_REQUEST);
+            return SingleResult.failure("400","username has been taken!");
         }
         userService.save(user);
-        return new ResponseEntity<>("User registered successfully", HttpStatus.OK);
+        return SingleResult.success("register successfully!");
     }
 
     @GetMapping("/activation/{userId}/{code}")

+ 1 - 1
src/main/java/cn/seecoder/fdroidrepository/DataObject/User.java

@@ -16,7 +16,7 @@ public class User {
     private String phoneNumber;
     private Date registrationDate;
     private boolean active;
-    // VISITOR, ADMIN
+    // USER, ADMIN
     private String role;
     private String activationCode;
     private Date createTime;

+ 1 - 1
src/main/java/cn/seecoder/fdroidrepository/config/WebSecurityConfig.java

@@ -68,7 +68,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
     @Override
     public void configure(WebSecurity web) {
-        String ignoreURLs = "/public/**,/open-api/**,/static/**,/css/**,/js/**,/images/**,/api/users/**";
+        String ignoreURLs = "/public/**,/open-api/**,/static/**,/css/**,/js/**,/images/**,/api/**";
         for (String ignoreURL : ignoreURLs.trim().split(SECURITY_IGNORE_URLS_SPILT_CHAR)) {
             web.ignoring().antMatchers(ignoreURL.trim());
         }