【发布时间】:2020-05-21 09:58:56
【问题描述】:
我的代码如下:
public class MyController {
@Value("${resource.clientId}") // this value is retreiving from vault
private String clientId;
@PreAuthorize("isClient(#clientId)") //isClient a custom security method
public String Mymethod(Authentication authentication){
}
}
如果我使用 clientId 作为 Mymethod 的参数,那么它工作正常。但与此同时,由于保险库 APPROLE 令牌到期,我面临着“找不到占位符 resource.clientId”之类的问题。
因此决定将方法 arg 更改为上面的类级别变量。但是这个@PreAuthorize [@PreAuthorize("isClient(#clientId)")] 逻辑没有选择clientid。 谁能分享一个合适的方法来解决这个问题?我需要在这里使用哪个表达式来解决这个问题?
【问题讨论】:
-
让我检查一下我是否理解正确:你想让 Spring EL 评估静态变量吗?
-
@DanielJacob - 我想将 clientId(来自类级别变量)值作为 isClient() 自定义安全方法的参数传递。没有任何问题的最佳方法是什么(使用表达式或任何其他方式)。我尝试了不同的方法来解决 NullPointer / failed expression 类型的问题。
-
@DanielJacob - “让我检查一下我是否理解正确:您希望 Spring EL 评估静态变量” - 如果这解决了我的问题,请分享表达式。 - 谢谢
-
是实例变量还是静态变量?
-
@Daiel Jacob - 我可以使用实例变量吗,目前我使用的是静态变量(如答案部分所述),但由于静态变量应该是私有的和最终的,因此出现声纳问题。如果我设置私有,clientid 不会获取并抛出失败的评估表达式。