Spring端点获取会话ID和HEATEOS

时间:2017-07-28 10:20:09

标签: java spring spring-mvc spring-security spring-hateoas

我正在使用弹簧控制器并为其添加授权和身份验证。 Spring控制器使用HATEOAS,我应该简单地添加一个服务来验证请求头中的会话ID。

使用Spring安全性似乎不合适,因为我要求外部服务基于资源进行身份验证和授权。但资源的授权发生在数据库内的元数据上。

我正在寻找一种简单而最佳的做法。

我有以下弹簧控制器端点:

@ApiOperation(value = "Gets a bucket's metadata by ID")
    @ApiResponses(value = { @ApiResponse(code = 404, message = "Bucket not found"),
                            @ApiResponse(code = 401, message = "User not authenticated"),
                            @ApiResponse(code = 403, message = "Permission denied"), })
    @RequestMapping(value = "/{bucketId}", method = GET)
    public BucketMetadata getMetadata(
            @ApiParam(value = "sessionID", required = true) @RequestHeader(value = "sessionID", required = true) String sessionId,
            @PathVariable long bucketId) throws NotAuthenticatedException, AccessDeniedException {
        restApiAccessService.checkAccessBySessionIdAndThrowIfDeclined(sessionId, bucketId);
        return bucketService.getBucketMetadata(bucketId);
    }

该服务依赖于验证sessionId的微服务,以及验证对bucketId的访问的授权服务。

1)我还没有看到在控制器中使用会话ID的spring示例。我可以改进那种设计吗?

我在端点中询问会话ID的原因是因为HATEOS链接正在访问本身需要会话ID的Controller。

linkTo(methodOn(CatalogObjectController.class).getRaw(sessionId,bucketId,URLEncoder.encode(name,"UTF-8")));

上面的代码看起来并不正确,迫使我处理未经过身份验证和未经授权的异常。

我会对任何类型的示例或输入感到高兴,以帮助我创建简洁,简洁,可维护的解决方案。

谢谢你, 托拜厄斯

0 个答案:

没有答案