Почему @RestControllerAdvice Handle Harder истек jwt исключения, выброшенные из jwtauthfilter?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему @RestControllerAdvice Handle Harder истек jwt исключения, выброшенные из jwtauthfilter?

Сообщение Anonymous »

Когда я делаю запрос получить запрос на демонстрацию конечной точки с истекшим токеном jwt, я получаю 403, я также получаю ошибку в консоли.
Это Ошибка я получаю в консоли: < /p>
2025-01-30T16:46:27.928+04:00 Ошибка 3173 --- [Mystoreauth] [Nio-8080-Exec-1] O.A.C.C.C. [. [. [/]. в 2025-01-28t13: 21: 19.000z. Текущее время: 2025-01-30T12: 46: 27,927Z. Допустимые часовые переколы: 0 миллисекунд. Я попытался сделать это, бросив ошибку в jwtauthfilter и обрабатывая ее @RestControllerAdvice, но это не работает. И я хочу спросить, почему это не работает, когда я бросаю ошибку из jwtauthfilter, но другие ошибки, которые я бросил из файлов контроллера, обрабатываются @RestControllerAdvice. Коды: < /p>
democontroller < /p>
@RestController
@RequestMapping("/api/v1/demo")
public class DemoController {
@GetMapping("")
public ResponseEntity sayHello() {
return ResponseEntity.ok("hi bro");
}
}
< / code>
SecurityConfig < / p>
@Configuration
@EnableWebSecurity
@AllArgsConstructor
public class SecurityConfig {
private final AuthenticationProvider authenticationProvider;
private JwtAuthFilter jwtAuthFilter;

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth -> auth
.requestMatchers("api/v1/auth/**").permitAll()
.anyRequest().authenticated()
)
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
.authenticationProvider(authenticationProvider)
.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
}
< /code>
globalexceptionHandler < /p>
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(AuthenticationFailedException.class)
public ResponseEntity handleAuthenticationFailedExceptions(AuthenticationFailedException ex) {
ErrorResponse errorResponse = new ErrorResponse(
HttpStatus.UNAUTHORIZED.value(),
"Authentication Failed",
ex.getMessage()
);
return new ResponseEntity(errorResponse, HttpStatus.UNAUTHORIZED);
}

@ExceptionHandler(BadRequestException.class)
public ResponseEntity handleBadRequestExceptions(BadRequestException ex) {
ErrorResponse errorResponse = new ErrorResponse(
HttpStatus.BAD_REQUEST.value(),
"Bad Request",
ex.getMessage()
);
return new ResponseEntity(errorResponse, HttpStatus.BAD_REQUEST);
}

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity handleValidationExceptions(MethodArgumentNotValidException ex) {
ErrorResponse errorResponse = new ErrorResponse(
HttpStatus.BAD_REQUEST.value(),
"Bad Request",
Objects.requireNonNull(ex.getBindingResult().getFieldError()).getDefaultMessage()
);

return new ResponseEntity(errorResponse, HttpStatus.BAD_REQUEST);
}

@ExceptionHandler(InvalidTokenException.class)
public ResponseEntity handleInvalidTokenExceptions(InvalidTokenException ex) {
ErrorResponse errorResponse = new ErrorResponse(
HttpStatus.UNAUTHORIZED.value(),
"Unauthorized",
ex.getMessage()
);
return new ResponseEntity(errorResponse, HttpStatus.UNAUTHORIZED);
}
}
< /code>
jwtauthfilter < /p>
@Component
@AllArgsConstructor
public class JwtAuthFilter extends OncePerRequestFilter {
private final JwtService jwtService;
private AppUserService appUserService;

@Override
protected void doFilterInternal(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull FilterChain filterChain) throws ServletException, IOException {
final String authHeader = request.getHeader("Authorization");
final String jwtToken;
final String userEmail;
if (authHeader == null || !authHeader.startsWith("Bearer")) {
filterChain.doFilter(request, response);
return;
}
jwtToken = authHeader.substring(7);
userEmail = jwtService.extractUsername(jwtToken);
if (userEmail != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.appUserService.loadUserByUsername(userEmail);

try {
jwtService.isTokenValid(jwtToken, userDetails);
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authToken);
} catch (ExpiredJwtException e) {
throw new InvalidTokenException("Expired token");
} catch (JwtException e) {
throw new InvalidTokenException("Invalid token");
}
}
filterChain.doFilter(request, response);
}
}
< /code>
jwtservice < /p>
@Service
public class JwtService {
public String extractUsername(String token) {
Claims claims = extractAllClaims(token);
return claims.getSubject();
}

public Date extractExpiration(String token) {
Claims claims = extractAllClaims(token);
return claims.getExpiration();
}

public String generateToken(UserDetails userDetails) {
return generateToken(new HashMap(), userDetails);
}

public String generateToken(Map extraClaims, UserDetails userDetails) {
return Jwts
.builder()
.claims(extraClaims)
.subject(userDetails.getUsername())
.issuedAt(new Date(System.currentTimeMillis()))
.expiration(new Date(System.currentTimeMillis() + 1000 * 60 * 24))
.signWith(getSignInKey(), Jwts.SIG.HS256)
.compact();
}

public boolean isTokenValid(String token, UserDetails userDetails) {
final String username = extractUsername(token);
return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
}

private boolean isTokenExpired(String token) {
return extractExpiration(token).before(new Date());
}

private Claims extractAllClaims(String token) {
return Jwts
.parser()
.verifyWith(getSignInKey())
.build()
.parseSignedClaims(token)
.getPayload();
}

private SecretKey getSignInKey() {
byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY);
return Keys.hmacShaKeyFor(keyBytes);
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -from-jwta
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему @RestControllerAdvice Handle Harder истек jwt исключения, выброшенные из jwtauthfilter?
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Токен JWT io.jsonwebtoken.ExpiredJwtException: срок действия JWT истек
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Для покрытия кода, как убедиться, что функции, выброшенные линкером, осмотрены
    Anonymous » » в форуме Linux
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Spring Security: ApikeyauthenticationFilter не выполняет до jwtauthfilter в Api Gateway
    Anonymous » » в форуме JAVA
    0 Ответы
    79 Просмотры
    Последнее сообщение Anonymous
  • C ++ SFML Окно, созданное из x11 Harder, говорит «не отвечать», несмотря на то, что работает нормально, и опросы для соб
    Anonymous » » в форуме C++
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»