我是这个项目的新手,我接到了向该项目添加一些服务的任务。首先,我在其他Rest包旁边创建了一个包NCDM
,并创建了我的课程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;
}
}
}
但是当我尝试从招摇发送请求时,收到以下响应:
{
"timestamp": 1579957861338,
"status": 401,
"error": "Unauthorized",
"message": "Unauthorized",
"path": "/ncdmMember/saveMember"
}
并且当对先前服务的sendig请求没有错误时,就会发生这种情况。有人知道这是什么问题吗?我需要在某个地方介绍我的包/类吗?
当我将其中一项书面服务复制到私人班级时,一切都很好。
任何帮助将不胜感激。
这是因为,您已经在项目中设置了Spring Security。根据身份验证的类型(OAuth2
,Basic Auth
,Digest Auth
等),您需要在定义为SwaggerConfiguration的Docket
bean中添加securityScheme。
示例:
按钮。以下是OAuth2的示例@Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2). ... // more configurations .securitySchemes(/*List of Your SecuritySchemes*/) .build();
然后您可以使用Swagger文档的Authorize
经过一些研究,当然还有答案给出的线索,我发现我的问题来自SpringSecurity,而我唯一需要做的就是将控制器类的基本URL添加到WebSecurityConfig作为允许的URL。如下所示: