spring引导:这安全吗?作为requestheader的api密钥与通过spring引导安全性的api密钥

68bkxrlz  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(219)

问题:我的实现是安全的(根据api密钥标准)还是和使用spring引导安全一样安全?
我已经生成了一个springbootapi,但是我没有使用springbootsecurity来实现api密钥安全性,而是编写了自己的api密钥实现。api密钥在每个“安全”请求中作为@requestheader传递(请参阅下面的“/booking/cancel”)。
控制器:

@RequestMapping(value = "/booking/cancel",
        consumes = { "application/json" },
        method = RequestMethod.POST)
public ResponseEntity<Void> cancelOrder(@RequestBody Cancellation cancellation, 
                                       @RequestHeader String apiKey) {

        if(apiKey == null) {
            return new ResponseEntity<Void>(HttpStatus.NOT_ACCEPTABLE);
        }

        long bookingProviderId;
        try {
            bookingProviderId = bookingService.getIdFromApiKey(apiKey);
            if (bookingProviderId < 0) {
                return new ResponseEntity<Void>(HttpStatus.NOT_ACCEPTABLE);
            }
        } catch (ApplicationException e) {
            e.printStackTrace();
            return new ResponseEntity<Void>(HttpStatus.INTERNAL_SERVER_ERROR);
        }

        //More code here...
}

服务层:
getidfromapikey函数存在于我的服务层中,并调用dao对象。它返回一个long(id),我随后可以使用它来管理控制器中的访问(例如,防止用户取消其他人的订单)。

public long getIdFromApiKey(String apiKey) throws ApplicationException {
    return apiKeyDao.selectId(apiKey);
}

dao层:

public long getApiKey (String apiKey) throws DataAccessException {

    BookingProvider bp = jdbcTemplate.queryForObject("SELECT * FROM BookingProvider WHERE apiKey = ?", BeanPropertyRowMapper.newInstance(BookingProvider.class), apiKey);

    if(bp == null)
        return -1;
    else
        return bp.getId();
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题