Merge pull request #18 from nagisa77/codex/fix-issue-with-retrieving-post-data

Fix anonymous access for post and comment retrieval
This commit is contained in:
Tim
2025-06-30 22:57:35 +08:00
committed by GitHub
@@ -81,12 +81,18 @@ public class SecurityConfig {
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String authHeader = request.getHeader("Authorization"); String authHeader = request.getHeader("Authorization");
String uri = request.getRequestURI();
boolean publicGet = "GET".equalsIgnoreCase(request.getMethod()) &&
(uri.startsWith("/api/posts") || uri.startsWith("/api/comments"));
if (authHeader != null && authHeader.startsWith("Bearer ")) { if (authHeader != null && authHeader.startsWith("Bearer ")) {
String token = authHeader.substring(7); String token = authHeader.substring(7);
try { try {
String username = jwtService.validateAndGetSubject(token); String username = jwtService.validateAndGetSubject(token);
UserDetails userDetails = userDetailsService().loadUserByUsername(username); UserDetails userDetails = userDetailsService().loadUserByUsername(username);
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(
userDetails, null, userDetails.getAuthorities());
org.springframework.security.core.context.SecurityContextHolder.getContext().setAuthentication(authToken); org.springframework.security.core.context.SecurityContextHolder.getContext().setAuthentication(authToken);
} catch (Exception e) { } catch (Exception e) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
@@ -94,12 +100,13 @@ public class SecurityConfig {
response.getWriter().write("{\"error\": \"Invalid or expired token\"}"); response.getWriter().write("{\"error\": \"Invalid or expired token\"}");
return; return;
} }
} else if (!request.getRequestURI().startsWith("/api/auth")) { } else if (!uri.startsWith("/api/auth") && !publicGet) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json"); response.setContentType("application/json");
response.getWriter().write("{\"error\": \"Missing token\"}"); response.getWriter().write("{\"error\": \"Missing token\"}");
return; return;
} }
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
} }
}; };