@DeleteMapping类型的接口访问的时候403 Forbidden

Blade 未结 2 24

一、该问题的重现步骤是什么?

  1.   我有如下的一个Controller类和一个接口。 

@Slf4j
@RestController
@RequestMapping("/termite/survey/dike-units")
@Api(tags = "堤防工程单元管理")
public class DikeProjectUnitController {
    @Autowired
    private IDikeProjectUnitService dikeProjectUnitService;
    @Autowired
    private ITbResDykeService dikeService;

    /**
     * 删除
     *
     * @param guid
     * @return
     */
    @PostMapping("/deleteById")
    @ApiOperation("删除记录")
    public R<Boolean> delete(@RequestParam Long guid) {
       try {
          return R.data(dikeProjectUnitService.removeById(guid));
       } catch (Exception e) {
          log.error(getStackString(e));
          return R.data(false);
       }
    }
}

2.  当我将接口声明成为@PostMapping的时候,接口是正常工作的。 如果我将接口声明成@DeleteMapping的时候,前端访问接口的时候会报出403 Forbidden的错误。 

3. 我知道是权限的问题。 但是没有找到哪里可以配置或者控制。 


二、你期待的结果是什么?实际看到的又是什么?


期望结果: 当我使用delete类型的rest接口进行访问的时候, 接口功能正常。 

实际结果: 403 Forbidden


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


bladex 2.1.x 

Java jdk版本: Java 11

操作系统: 国产麒麟系统, 类似于Linux。 这个问题应该和系统无关。 


四、请提供详细的错误堆栈信息,这很重要。


前端直接报出 403。  然后我看了gateway的日志, 好像是没有这个接口的访问记录(这也是一个我奇怪的地方)。 


五、若有更多详细信息,请在下面提供。


暂无。 

2条回答
  • 详细错误信息是什么,参数格式是否传对,前端axios的request方法有没有指定delete方法

    0 讨论(1)
  • 41分钟前

    就是在浏览器上面会报错。其余任何地方都没没有错误日志。


    xhr.js:195  DELETE http://localhost:1888/api/blade-termite-survey/termite/survey/reservoir-units/deleteByld?guid=1963149469900455938 403 (Forbidden)


    附上前端的代码:

    removepcxxData(row) {
          console.log("row", row)
          var index = this.form1.pcdyxxTbList.indexOf(row)
          if (index !== -1) {
            this.form1.pcdyxxTbList.splice(index, 1)
          }
          console.log, ("pcdyxxTbList", this.form1.pcdyxxTbList)
          const params = {};
          params.guid = row.guid;
          postdeleteDfEngineerApi(params).then(res => {
            console.log("res", res)
            if (res) {
              var index = this.form1.pcdyxxTbList.findIndex(item => item.guid === params.guid)
              if (index !== -1) {
                console.log('params.guid', params.guid);
                this.form1.pcdyxxTbList.splice(index, 1)
              }
            }
          })
    
        },
    export const postdeleteDfEngineerApi = (params) => {
      return request({
        // url: "/api/blade-termite-survey/termite/survey/dike-units/deleteById",
        url: "/api/blade-termite-survey/termite/survey/dike-units/deleteById",
    
        method: "delete",
        params,
      });
    };


    作者追问:40分钟前

    用postman调用接口试试,然后用一个原生的springboot项目,把你的代码拷贝过去再调用试试

    0 讨论(0)
提交回复