【问题标题】:Authentication issue with spring security, JWT on resource APISpring Security 的身份验证问题,资源 API 上的 JWT
【发布时间】: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


【解决方案1】:

我发现了问题。

我将以下内容用于“/getList”映射:

    // call dao to insert to DB the list and then call the stored proc
    URI location = ServletUriComponentsBuilder.fromCurrentContextPath().path("/api/rest/getPackingListReport/{packingListNumber}").buildAndExpand(packingListNumber).toUri();

    return ResponseEntity.created(location).build();

在 POST 之后返回创建的资源 URI(HTTP STATUS 201)。该路径包含以“http://localhost”开头的不正确 URI,而 jHipster 当前默认设置为仅处理和查找“/api”,或者在我的情况下,我在 Angular5 端添加了“/rest/api/*”。

我通过在收到 URL 后过滤掉“/api/”之前的所有字符来解决此问题。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2019-04-08
    • 2019-02-07
    • 1970-01-01
    • 2016-05-29
    • 2022-08-16
    • 2018-08-20
    • 2015-07-01
    相关资源
    最近更新 更多