0

我有一种方法用于通过弹簧安全性限制访问。以下是方法:

@PreAuthorize("isAuthenticated() and hasPermission(#request, 'CREATE_REQUISITION')")
    @RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition")
    public @ResponseBody
    void createRequisition(@RequestBody CreateRequisitionRO[] request,
            @RequestHeader("validateOnly") boolean validateOnly) {
        logger.debug("Starting createRequisition()...");
        for (int i = 0; i < request.length; i++) {
            CreateRequisitionRO requisitionRequest = request[i];

            // FIXME this has to be removed/moved
            requisitionRequest.setFundManager(requisitionRequest.getUserId());
            // FIXME might have to search using param level as well
            SystemDefault sysDefault = dbFuncs.references.systemDefault
                    .findByCompanyAndDivisionAndPortfolio(
                            userContext.getCompany(),
                            userContext.getDivision(),
                            requisitionRequest.getPortfolio());
            requisitionRequest.setCustodianN(sysDefault.getCustodianN());

            gateKeeper.route(requisitionRequest);
        }
    }

现在我想在运行时使用 java Reflection 来测试该方法是否像单元测试一样工作正常。

我曾尝试为上述内容编写 TestNG,但由于我们拥有的项目架构而无法正常工作,因此决定使用反射进行测试[though which is not a good way of doing this and later we will find the solution for this]

我的问题是如何为该方法创建一个 java 反射类并调用上述方法并将 URL 发送/trade/createrequisition到服务器,无论登录用户是否可以访问它。

这该怎么做。

4

1 回答 1

1

如果您想检查是否在方法上添加了安全注释,那么在使用 java 反射 API 的单元测试用例中,您可以这样做。

使用反射找到方法并检查 method.getAnnotation(PreAuthorize.class)

但实际上您应该将此作为集成/功能测试进行测试。

于 2013-04-05T06:50:25.457 回答