mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-21 22:41:05 +08:00
功能追加:显示在线人数
This commit is contained in:
@@ -36,6 +36,8 @@ public class CachingConfig {
|
||||
public static final String TAG_CACHE_NAME="openisle_tags";
|
||||
// 分类缓存名
|
||||
public static final String CATEGORY_CACHE_NAME="openisle_categories";
|
||||
// 在线人数缓存名
|
||||
public static final String ONLINE_CACHE_NAME="openisle_online";
|
||||
|
||||
/**
|
||||
* 自定义Redis的序列化器
|
||||
|
||||
@@ -129,6 +129,8 @@ public class SecurityConfig {
|
||||
.requestMatchers(HttpMethod.GET, "/api/sitemap.xml").permitAll()
|
||||
.requestMatchers(HttpMethod.GET, "/api/channels").permitAll()
|
||||
.requestMatchers(HttpMethod.GET, "/api/rss").permitAll()
|
||||
.requestMatchers(HttpMethod.GET, "/api/online/**").permitAll()
|
||||
.requestMatchers(HttpMethod.POST, "/api/online/**").permitAll()
|
||||
.requestMatchers(HttpMethod.GET, "/api/point-goods").permitAll()
|
||||
.requestMatchers(HttpMethod.POST, "/api/point-goods").permitAll()
|
||||
.requestMatchers(HttpMethod.POST, "/api/categories/**").hasAuthority("ADMIN")
|
||||
@@ -183,7 +185,8 @@ public class SecurityConfig {
|
||||
}
|
||||
} else if (!uri.startsWith("/api/auth") && !publicGet
|
||||
&& !uri.startsWith("/api/ws") && !uri.startsWith("/api/sockjs")
|
||||
&& !uri.startsWith("/api/v3/api-docs")) {
|
||||
&& !uri.startsWith("/api/v3/api-docs")
|
||||
&& !uri.startsWith("/api/online")) {
|
||||
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
|
||||
response.setContentType("application/json");
|
||||
response.getWriter().write("{\"error\": \"Missing token\"}");
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.openisle.controller;
|
||||
|
||||
import com.openisle.config.CachingConfig;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* @author smallclover
|
||||
* @since 2025-09-05
|
||||
* 统计在线人数
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/online")
|
||||
@RequiredArgsConstructor
|
||||
public class OnlineController {
|
||||
|
||||
private final RedisTemplate redisTemplate;
|
||||
private static final String ONLINE_KEY = CachingConfig.ONLINE_CACHE_NAME +":";
|
||||
|
||||
@PostMapping("/heartbeat")
|
||||
public void ping(@RequestParam String userId){
|
||||
redisTemplate.opsForValue().set(ONLINE_KEY+userId,"1", Duration.ofSeconds(150));
|
||||
}
|
||||
|
||||
@GetMapping("/count")
|
||||
public long count(){
|
||||
return redisTemplate.keys(ONLINE_KEY+"*").size();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user