Отправка запросов на отдых веб-сервисов от чванства до 401 и несанкционированный - PullRequest
0 голосов
/ 25 января 2020

Я новичок в этом проекте, и у меня есть задача добавить некоторые сервисы в проект. Сначала я создал пакет NCDM рядом с другими пакетами Rest и создал свой класс NCDMMemberController:

    package ir.anarestan.ipc.controller.NCDM;
    import ir.anarestan.ipc.controller.helper.NCDM.NCDMMemberDTO;
    import ir.anarestan.ipc.controller.helper.ResponseDTO;
    import ir.anarestan.ipc.service.NCDM.NCDMMemberService;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.mobile.device.Device;
    import org.springframework.web.bind.annotation.*;

    import java.util.List;


    @RestController
    @RequestMapping(path = "/ncdmMember")
    public class NCDMMemberController {

private final static Logger logger = LoggerFactory.getLogger(NCDMMemberController.class);

@Autowired
private NCDMMemberService ncdmMemberService;

@ResponseBody
@RequestMapping(value = "/getMember", method = RequestMethod.GET, produces = "application/hal+json")
public Object get(@RequestBody NCDMMemberDTO memberDTO, Device device) {
    ResponseDTO responseDTO = new ResponseDTO();
    try {
        responseDTO.setSuccess(true);
        responseDTO.setHttpStatus(HttpStatus.OK.value());
        responseDTO.setResponseBody(ncdmMemberService.getMemberByMemberIdAndImei(memberDTO));
        return responseDTO;
    } catch (Exception e) {
        logger.info("error occurred!", e);
        responseDTO.setSuccess(false);
        responseDTO.setErrorMessage(e.getMessage());
        responseDTO.setHttpStatus(HttpStatus.EXPECTATION_FAILED.value());
        responseDTO.setResponseBody(null);
        return responseDTO;
    }
}

@ResponseBody
@RequestMapping(value = "/saveMember", method = RequestMethod.POST, produces = "application/hal+json")
public Object save(@RequestBody NCDMMemberDTO member, Device device) {
    ResponseDTO responseDTO = new ResponseDTO();
    try {
        ncdmMemberService.saveMember(member);
        responseDTO.setSuccess(true);
        responseDTO.setHttpStatus(HttpStatus.OK.value());
        responseDTO.setResponseBody(null);
        return responseDTO;
    } catch (Exception e) {
        logger.info("error occurred!", e);
        responseDTO.setSuccess(false);
        responseDTO.setErrorMessage(e.getMessage());
        responseDTO.setHttpStatus(HttpStatus.EXPECTATION_FAILED.value());
        responseDTO.setResponseBody(null);
        return responseDTO;
    }
}
}

, но когда я пытаюсь отправить запрос от swagger, я получил следующий ответ:

{
  "timestamp": 1579957861338,
  "status": 401,
  "error": "Unauthorized",
  "message": "Unauthorized",
  "path": "/ncdmMember/saveMember"
}

И это происходит, когда запрос sendig к предыдущим сервисам не содержит ошибок. Кто-нибудь знает, в чем проблема? Нужно ли где-нибудь представить свой пакет / класс?

И когда я копирую один из написанных сервисов в первичные классы, все в порядке.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 25 января 2020

это потому, что вы настроили Spring Security в своем проекте. В зависимости от типа аутентификации (OAuth2, Basic Auth, Digest Auth, ... et c.) Вам необходимо добавить securityScheme в ваш компонент Docket, определенный как SwaggerConfiguration.

Пример:

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2).
    ... // more configurations
    .securitySchemes(/*List of Your SecuritySchemes*/)
    .build();

Затем вы можете использовать кнопку Swagger Documentation Authorize . Ниже приведен пример OAuth2

enter image description here

enter image description here

0 голосов
/ 28 января 2020

После некоторых исследований и, конечно же, подсказок, которые мне дали ответы, я обнаружил, что моя проблема возникла из SpringSecurity, и единственное, что мне нужно было сделать, это просто добавить свой базовый URL-адрес класса контроллера в WebSecurityConfig, как это разрешено URL, как показано ниже:

.antMatchers("/ncdmMember/**").permitAll()
...