Почему вызов моего микросервиса в Java Spring Boot возвращает 403 Forbidden?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему вызов моего микросервиса в Java Spring Boot возвращает 403 Forbidden?

Сообщение Anonymous »

Я использую SpringBoot с сервером Eureka. У меня есть микросервис пользователей, один сервер eureka и одна папка Springcloud apigateway. Вот полный исходный код
В контроллере микросервиса моего пользователя у меня есть код ниже
@RestController
@RequestMapping("/users")
public class UsersController {

@Autowired
private Environment env;

@Autowired
UsersService usersService;

@GetMapping("/status/check")
public String status(){
System.out.println("hereeeeeeeeeee");
return "Working "+env.getProperty("local.server.port");
}

@PostMapping
public ResponseEntity createUser(@Valid @RequestBody CreateUserRequestModel userDetails) {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserDto userDto = modelMapper.map(userDetails, UserDto.class);
UserDto createdUser = usersService.createUser(userDto);
CreateUserResponseModel body = modelMapper.map(createdUser, CreateUserResponseModel.class);
return ResponseEntity.status(HttpStatus.CREATED).body(body);
}

}

Теперь конечная точка Get api возвращает ошибку 403 Forbidden, конечная точка публикации работает нормально.
Ниже приведен снимок экрана с ошибкой
Изображение

Я определил AuthorizationHeaderFilter< /code> класс в apigateway, который используется для декодирования jwt, который я отправляю в конечной точке GET Api, и он правильно декодирует JWT
@Component
public class AuthorizationHeaderFilter extends AbstractGatewayFilterFactory{

@Autowired
private Environment environment;

public AuthorizationHeaderFilter(){
super(Config.class);
}

public static class Config{

}

@Override
public GatewayFilter apply(Config config) {
return (exchange,chain)->{
ServerHttpRequest request = exchange.getRequest();
if(!request.getHeaders().containsKey(HttpHeaders.AUTHORIZATION)){
return onError(exchange,"No authorization header",HttpStatus.UNAUTHORIZED);
}
String authorizationHeader = request.getHeaders().get(HttpHeaders.AUTHORIZATION).get(0);
String jwt = authorizationHeader.replace("Bearer ", ""); //Make sure you add space
if(!isJwtValid(jwt)){
return onError(exchange, "Jwt token is invalid",HttpStatus.UNAUTHORIZED);
}
return chain.filter(exchange);
};
}

private Mono onError(ServerWebExchange exchange,String err,HttpStatus httpStatus){
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(httpStatus);
return response.setComplete();
}

private boolean isJwtValid(String jwt){
System.out.println("1");
boolean isValid = false;
String subject = null;
String tokenSecret = environment.getProperty("token.secret");
System.out.println("2 "+tokenSecret);
SecretKey secretKey = Keys.hmacShaKeyFor(tokenSecret.getBytes());

JwtParser jwtParser = Jwts.parser().verifyWith(secretKey).build();
try{
// Jwt parsedToken = jwtParser.parse(jwt);
subject = jwtParser.parseSignedClaims(jwt).getPayload().get("userId").toString();
System.out.println("3 "+subject);
} catch(Exception ex){
isValid = false;
System.out.println("4 "+ex.getLocalizedMessage());
}

if(subject == null || subject.isEmpty()){
isValid = false;
} else {
isValid = true;
}
System.out.println("5 ");
return isValid;
}

}

Вот application.properties моего API-пути
spring.application.name=api-gateway
server.port=8082
eureka.client.service-url.defaultZone=http://localhost:8010/eureka

spring.cloud.gateway.routes[0].id=users-status-check
spring.cloud.gateway.routes[0].uri=lb://users-ws
spring.cloud.gateway.routes[0].predicates[0]=Path=/users-ws/users/status/check
spring.cloud.gateway.routes[0].predicates[1]=Method=GET
spring.cloud.gateway.routes[0].predicates[2]=Header=Authorization, Bearer (.*)
spring.cloud.gateway.routes[0].filters[0]=RemoveRequestHeader=Cookie
spring.cloud.gateway.routes[0].filters[1]=RewritePath=/users-ws/(?.*), /$\{segment}
spring.cloud.gateway.routes[0].filters[2]=AuthorizationHeaderFilter

spring.cloud.gateway.routes[1].id=users-ws
spring.cloud.gateway.routes[1].uri=lb://users-ws
spring.cloud.gateway.routes[1].predicates[0]=Path=/users-ws/users
spring.cloud.gateway.routes[1].predicates[1]=Method=POST
spring.cloud.gateway.routes[1].filters[0]=RemoveRequestHeader=Cookie
spring.cloud.gateway.routes[1].filters[1]=RewritePath=/users-ws/(?.*), /$\{segment}

spring.cloud.gateway.routes[2].id=users-ws-h2-console
spring.cloud.gateway.routes[2].uri=lb://users-ws
spring.cloud.gateway.routes[2].predicates[0]=Path=/users-ws/h2-console
spring.cloud.gateway.routes[2].predicates[1]=Method=GET
spring.cloud.gateway.routes[2].filters[0]=RemoveRequestHeader=Cookie
spring.cloud.gateway.routes[2].filters[1]=RewritePath=/users-ws/(?.*), /$\{segment}

spring.cloud.gateway.routes[3].id=users-ws-login
spring.cloud.gateway.routes[3].uri=lb://users-ws
spring.cloud.gateway.routes[3].predicates[0]=Path=/users-ws/users/login
spring.cloud.gateway.routes[3].predicates[1]=Method=POST
spring.cloud.gateway.routes[3].filters[0]=RemoveRequestHeader=Cookie
spring.cloud.gateway.routes[3].filters[1]=RewritePath=/users-ws/(?.*), /$\{segment}

spring.cloud.gateway.routes[4].id=users-ws-get-update-delete
spring.cloud.gateway.routes[4].uri=lb://users-ws
spring.cloud.gateway.routes[4].predicates[0]=Path=/users-ws/users/**
spring.cloud.gateway.routes[4].predicates[1]=Method=GET,PUT,DELETE
spring.cloud.gateway.routes[4].predicates[2]=Header=Authorization, Bearer (.*)
spring.cloud.gateway.routes[4].filters[0]=RemoveRequestHeader=Cookie
spring.cloud.gateway.routes[4].filters[1]=AuthorizationHeaderFilter
spring.cloud.gateway.routes[4].filters[2]=RewritePath=/users-ws/(?.*), /$\{segment}

token.secret=1aBcD3eF4gH5iJ6kL7mN8oP9qRsTuVwXyZ0A1bCdEfG2hI3jK4lM5nO6pQ7rStU8vW9xYz


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему вызов моего микросервиса в Java Spring Boot возвращает 403 Forbidden?
    Anonymous » » в форуме JAVA
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Почему Spring Boot возвращает 403 Forbidden для запроса POST к защищенной конечной точке даже с действительным JWT?
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Почему Spring Boot возвращает 403 Forbidden для запроса POST к защищенной конечной точке даже с действительным JWT?
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Запрос на Spring Server возвращает 403 Forbidden
    Anonymous » » в форуме Android
    0 Ответы
    91 Просмотры
    Последнее сообщение Anonymous
  • Запрос на Spring Server возвращает 403 Forbidden
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

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