问题:我的实现是安全的(根据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();
}
暂无答案!
目前还没有任何答案,快来回答吧!