feat: register logic refactor

This commit is contained in:
merlin
2025-11-17 18:02:58 +08:00
parent 575041905b
commit 23cb31d4fe
45 changed files with 768 additions and 70 deletions

View File

@@ -0,0 +1,27 @@
package xin.merlin.myplayerbackend.config.security;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Slf4j
@Component
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
String message = "认证失败";
if (exception instanceof InsufficientAuthenticationException) {
message = "未提供认证信息";
}
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(message);
}
}

View File

@@ -35,12 +35,12 @@ public class JWTAuthenticationFilter extends OncePerRequestFilter {
try {
if (!jwtUtil.isTokenExpired(token)) {
System.out.println(token);
String username = jwtUtil.getUAccount(token);
System.out.println("token expired: " + token);
String account = jwtUtil.getAccount(token);
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
if (account != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(username, null, Collections.emptyList());
new UsernamePasswordAuthenticationToken(account, null, Collections.emptyList());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
}

View File

@@ -1,7 +1,6 @@
package xin.merlin.myplayerbackend.config.security;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -22,21 +21,23 @@ public class SecurityConfig {
private final JWTAuthenticationFilter jwtAuthenticationFilter;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
public SecurityFilterChain filterChain(HttpSecurity http,CustomAuthenticationEntryPoint entryPoint) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(authz -> authz
.requestMatchers(
"/error",
"/login",
"/register",
"/health",
"/code/**",
"/blog/**"
"/v3/api-docs/**"
).permitAll()
.anyRequest().authenticated()
)
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
.exceptionHandling(ex -> ex.authenticationEntryPoint(entryPoint));
return http.build();
}
@@ -48,7 +49,7 @@ public class SecurityConfig {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*") // 开发阶段允许所有来源
.allowedOriginPatterns("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.exposedHeaders("Authorization")