gpt4 book ai didi

java - Spring security-方法级安全性不适用于从另一个方法调用

转载 作者:行者123 更新时间:2023-11-30 04:41:54 26 4
gpt4 key购买 nike

假设我有两种方法

 @Secured("ROLE_ADMIN")
@RequestMapping(value = "/methodA", method = RequestMethod.GET)
public void MethodA(){
// code
}

以及调用第一个方法的另一个方法

@RequestMapping(value = "/MethodB", method = RequestMethod.GET)
public void MethodB(){
MethodA();
//code
}

如果我使用权限 ROLE_USER 登录应用程序并尝试访问 URL /methodA,我会收到拒绝访问异常 - 完美!但是,如果我访问 URL /methodB,即使我使用 ROLE_USER 权限访问 MethodA,也不会出现访问被拒绝的异常。它应该像那样工作还是我做错了什么。

PS:这不是一个实时应用场景,但我只是在玩弄代码。

最佳答案

这是因为 Spring Security 通过代理您的安全类来工作。这意味着它为您现有的类放置了一个包装器。如果使用基于接口(interface)的代理,则它可以是 java.lang.Proxy,也可以是 cglib 增强子类。不过,我不想在这里过多讨论这一点。

但最重要的是,当外部调用者调用您的方法之一时,会发生以下情况:

Caller ---> Proxy ---> Security Interceptor ---> Implementation class

它是安全拦截器,用于检查注释并确定要应用的安全性。然而,一旦进入实际的实现类,您只是调用方法,而不涉及代理和安全拦截器,因此没有安全检查。

因此,您需要使用适合它的 @Secured 注释以及它内部调用的任何内容来保护您的每个入口点。

关于java - Spring security-方法级安全性不适用于从另一个方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com