当前位置: 首页 > 知识库问答 >
问题:

如何在Spring AOP advise中提取变量值

宰父冠玉
2023-03-14

API中的每个REST调用都集成了身份验证方法。我一直试图通过Spring AOP实现一个认证方法,这样我就可以从endpoint中删除所有重复的代码,并且只需要一个建议就可以在控制器中查找所有的公共方法。

请检查以下我的代码,

@Aspect
public class EndpointAccessAspect {
/**
 * All the request mappings in controllers need to authenticate and validate end-point access
 */

@Before("execution(public * com.xxxx.webapi.controllers.MenuController.getCategory(HttpServletRequest)) && args(request)")
public void checkTokenAccess(HttpServletRequest request){
    String re =(String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
 System.out.println(" %%%%%%%%%%%%%%%%%%% checkTokenAccess %%%%%%%%%%%%%%%" + re);
}

public void checkEndPointPermission(){
    System.out.println(" $$$$$$$$$$$$$$$$$$ checkEndPointPermission &&&&&&&&&&&&&");
}

}

但是,我看到Intelij在< code > get category(http servlet request)附近给出错误

代码正在编译,当我测试功能时,我注意到它没有达到建议。有人能帮我解决这个问题吗?我从Spring文档Spring.doc中找到了这个

任何接受单个参数的连接点(只在Spring AOP中执行方法),并且在运行时传递的参数是可序列化的

这是否意味着我不能使用具有多个参数的方法?

控制器终点

@RequestMapping(value = "{menuId}/categories/{categoryId}", method = RequestMethod.GET)
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Successful retrieval of a category requested", response = ProductGroupModel.class),
            @ApiResponse(code = 500, message = "Internal server error") })
    public ProductGroupModel getCategory(
            @ApiParam(name = "menuId", value = "Numeric value for menuId", required = true) @PathVariable(value = "menuId") final String menuId,
            @ApiParam(name = "categoryId", value = "Numeric value for categoryId", required = true) @PathVariable(value = "categoryId") final String categoryId,
            final HttpServletRequest request) {

共有1个答案

充鑫鹏
2023-03-14

以下语法解决了上述问题。基本上,我必须修改代码以处理通知中的多个参数。

@Before("execution(public * com.xxxx.webapi.controllers.MenuController.getCategory( HttpServletRequest,..)) && args(request, ..)")
public void checkTokenAccess(HttpServletRequest request){
    String re =(String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
 System.out.println(" %%%%%%%%%%%%%%%%%%% checkTokenAccess %%%%%%%%%%%%%%%" + re);
}
 类似资料:
  • 问题内容: 我在词典中只有一个键/值对。我想将键分配给一个变量,并将其值分配给另一个变量。我已经尝试过以下方式,但是我却遇到了同样的错误。 我知道我们可以一键提取键和值,也可以通过for循环和键来提取键和值,但是难道没有一种简单的方法可以在一个语句中分配键和值吗? 问题答案: 用元组添加另一个级别(只是逗号): 或列出: 或挑选第一个元素: 前两个具有一个额外的优点,即如果您的字典具有多个键,它们

  • 问题内容: 我想要可以使用PHP访问的JavaScript变量的值。我正在使用下面的代码,但它没有在PHP中返回该变量的值。 这给了我以下错误:- 我使用的另一个PHP代码给出了空值 当我回声时,它什么也没显示。 问题答案: 您将需要使用JS将其中包含变量的URL发送回去,例如:http : //www.site.com/index.php?uid=1 通过在JS中使用如下代码: 然后在PHP代码

  • 问题内容: Python中是否有内置方法来获取所有类的实例变量的数组?例如,如果我有以下代码: 有没有办法让我做到这一点: 编辑:我最初是错误地要求类变量。 问题答案: 每个对象都有一个包含所有变量及其值的变量。 尝试这个

  • 我正在尝试使用在我的Quarkus应用程序中读取环境变量,但没有成功。我认为仅指定变量名应该就足够了,但它不起作用: 我还尝试在应用程序中指定一个属性。属性 读起来就像 但变量始终为空。 我错过什么了吗?在Quarkus中读取环境变量的正确方法是什么 我正在使用Quarkus 1.2.0。最终的

  • 我想获取所选框的值,并将其保存在PHP变量中。我想保存并回显变量。请帮忙

  • 问题内容: 我对NodeJ很陌生。而且我正在尝试将文件读入变量。这是我的代码。 但每次我运行该脚本,我得到 和 我想念什么?请帮助! 问题答案: 正如您在问题下的注释中所述,节点是异步的-意味着当您调用第二个函数时,您的函数尚未完成执行。 如果在读取文件后将日志语句移动到回调中,则应该看到输出的内容: 即使这将解决您眼前的问题,但如果不了解节点的异步特性,您将遇到很多问题。