当前位置: 首页 > 面试题库 >

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

韩博厚
2023-03-14
问题内容

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

例如,我想创建一个自定义方法,例如“ customMethodReturningBoolean”,以这种方式使用:

  @PreAuthorize("customMethodReturningBoolean()")
  public void myMethodToSecure() { 
    // whatever
  }

我的问题是这个。如果可能,我应该子类化什么类来创建我的自定义方法,我将如何在spring xml配置文件中对其进行配置,然后有人给我提供以这种方式使用的自定义方法的示例?


问题答案:

你需要子类化两个类。

首先,设置一个新的方法表达式处理程序

<global-method-security>
  <expression-handler ref="myMethodSecurityExpressionHandler"/>
</global-method-security>

myMethodSecurityExpressionHandler将是的一个子类DefaultMethodSecurityExpressionHandler,其覆盖createEvaluationContext(),设置的一个子类MethodSecurityExpressionRootMethodSecurityEvaluationContext

例如:

@Override
public EvaluationContext createEvaluationContext(Authentication auth, MethodInvocation mi) {
    MethodSecurityEvaluationContext ctx = new MethodSecurityEvaluationContext(auth, mi, parameterNameDiscoverer);
    MethodSecurityExpressionRoot root = new MyMethodSecurityExpressionRoot(auth);
    root.setTrustResolver(trustResolver);
    root.setPermissionEvaluator(permissionEvaluator);
    root.setRoleHierarchy(roleHierarchy);
    ctx.setRootObject(root);

    return ctx;
}


 类似资料:
  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

  • 我正在使用Hibernate@NotNull验证器,我正在尝试创建自定义消息来告诉用户哪个字段在空时产生了错误。类似这样的东西: (这将在我的ValidationMessages.properties文件中)。 其中,{0}应该是通过以下方式传递给验证程序的字段名: 我有办法做到吗?

  • 我想用java为创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个

  • 如何从注释中提取操作和对象参数? 如何解析对象定义中的SpEL表达式并将对象作为'act'参数传递?

  • 问题内容: 在StackOverflow上有很多类似的问题,但是我找不到任何答案:( 我有像这样的web.xml: 并尝试使用注释配置方法安全性。如我所见,在我看来,它必须由放置在与其他组件相同的上下文中。所以我有以下内容: 和: 添加所有控制器后停止工作的问题。我在日志中有以下内容: 当我删除此元素时,一切正常。如果我将其添加到-没有任何变化。似乎没有使用它,因为任何人都可以使用带有(或任何其他

  • 如何计算方面中的Spring Security表达式?我想我可以很容易地使用完成这项工作的类I spring框架