【发布时间】:2019-03-26 23:51:46
【问题描述】:
我遇到了与身份验证相关的问题,当我尝试从通过 POST 创建的端点(HTTP STATUS 201)进行 GET 时,我从我的应用程序中注销,我看到以下错误。当我登录时,后端将用户视为anonymousUser,但对于同一文件中的另一个端点工作正常:
2018-10-22 11:33:35.251 调试 2124 --- [XNIO-8 任务 23] c.c.link.aop.logging.LoggingAspect :输入: org.springframework.boot.actuate.audit.AuditEventRepository.add() 与 参数[s] = [AuditEvent [时间戳=2018 年 10 月 22 日星期一 11:33:35 PDT, 主体=匿名用户,类型=AUTHORIZATION_FAILURE, 数据={详细信息=org.springframework.security.web.authentication.WebAuthenticationDetails@fffed504: 远程IP地址:127.0.0.1;会话 ID: _5aP-S8x27gGSIjtbkR6EwrWOD9Yybnd-4M3z0ol,类型=org.springframework.security.access.AccessDeniedException, 消息=拒绝访问}]] 2018-10-22 11:33:35.258 调试 2124 --- [ XNIO-8 task-23] c.c.link.aop.logging.LoggingAspect :退出: org.springframework.boot.actuate.audit.AuditEventRepository.add() 与 结果 = null 2018-10-22 11:33:35.343 WARN 2124 --- [XNIO-8 task-23] o.z.p.spring.web.advice.AdviceTrait:未经授权:完整 访问此资源需要身份验证
相同的资源 (DeliveryResource.java) 有一个可以正常工作的端点 两个端点之间的唯一区别是 /getList (这个工作正常)VS。 /getPackingListReport/{number} (这个验证失败)。
API 定义如下:
@GetMapping("/getPackingListReport/{number}")
@Secured(AuthoritiesConstants.USER)
@Timed
public ArrayList<WebOrder> getPackingListReportFromDB(@PathVariable("number") long packingListNbr)
对比
@GetMapping("/getList")
@Secured(AuthoritiesConstants.USER)
@Timed
public WebOrder getList(@RequestParam(value = "custid") long custid,@RequestParam(value = "pId") long pId) {
【问题讨论】:
-
检查您如何配置
HttpSecurity。 -
该资源的 URL 在 HttpSecurity 下配置为 .antMatchers("/delivery/**").authenticated() 所以完整的 URL 将是 /delivery/getPackingListReport/{number}。 /delivery/getList 可以正常工作,而 /delivery/getPackingListReport/{number} 不能。
-
你的 URL 不是很 RESTful,资源应该是名词而不是动词。
标签: java spring-boot spring-security angular5 jhipster