如何创建用于spring安全表达式语言注释的自定义方法

我想创建一个类,通过注释添加自定义方法以用于spring安全表达式语言,以进行基于方法的授权。


例如,我想创建一个像'customMethodReturningBoolean'这样的自定义方法,以某种方式使用:


  @PreAuthorize("customMethodReturningBoolean()")

  public void myMethodToSecure() { 

    // whatever

  }

我的问题是这个。如果有可能,我应该创建自定义方法的子类,我将如何在spring xml配置文件中配置它,有人给我一个这样使用的自定义方法的示例?


尚方宝剑之说
浏览 899回答 3
3回答

慕桂英3389331

您需要子类化两个类。首先,设置一个新方法表达式处理程序<global-method-security>&nbsp; <expression-handler ref="myMethodSecurityExpressionHandler"/></global-method-security>myMethodSecurityExpressionHandler将是的一个子类DefaultMethodSecurityExpressionHandler,其覆盖createEvaluationContext(),设置的一个子类MethodSecurityExpressionRoot的MethodSecurityEvaluationContext。例如:@Overridepublic EvaluationContext createEvaluationContext(Authentication auth, MethodInvocation mi) {&nbsp; &nbsp; MethodSecurityEvaluationContext ctx = new MethodSecurityEvaluationContext(auth, mi, parameterNameDiscoverer);&nbsp; &nbsp; MethodSecurityExpressionRoot root = new MyMethodSecurityExpressionRoot(auth);&nbsp; &nbsp; root.setTrustResolver(trustResolver);&nbsp; &nbsp; root.setPermissionEvaluator(permissionEvaluator);&nbsp; &nbsp; root.setRoleHierarchy(roleHierarchy);&nbsp; &nbsp; ctx.setRootObject(root);&nbsp; &nbsp; return ctx;}
打开App,查看更多内容
随时随地看视频慕课网APP