gpt4 book ai didi

java - Spring-Security 3/Spring MVC 和可怕的@Secured/RequestMapping

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:42 25 4
gpt4 key购买 nike

我在向我的 Controller 添加安全注释时遇到了很多问题。

事实证明,让我的 Controller 实现 InitializingBean 是个坏主意。

public class MyController implements InitializingBean {

@Secured(value="ROLE_ADMIN")
@RequestMapping(method = RequestMethod.GET, value = "/{id}/edit")
public String getView(Model model, @PathVariable("id") long id) {
return "some view";
}
}

这失败了:

WARN PageNotFound:962 - No mapping found for HTTP request with URI[...]

删除@Secured 注释会起作用,但显然我不想那样做。在网上浪费了大量时间后,我注意到工作 Controller 和非工作 Controller 之间的最后一个区别是它实现了 InitializingBean 接口(interface)。现在这就像一个魅力:

public class MyController{

@Secured(value="ROLE_ADMIN")
@RequestMapping(method = RequestMethod.GET, value = "/{id}/edit")
public String getView(Model model, @PathVariable("id") long id) {
return "some view";
}
}

谁能帮我理解这种行为?

最佳答案

发生这种情况是因为当使用 JDK 动态代理应用安全方面时,对注释的访问会丢失,这在默认情况下会在建议的 bean 实现任何接口(interface)时发生。

要解决这个问题,您应该告诉 Spring Security 仅应用基于目标类的代理,使用 <global-method-security proxy-target-class = "true" ...> ... (<aop:config proxy-target-class = "true" /> 也适用)。

关于 AOP 代理的更多信息 here .

关于java - Spring-Security 3/Spring MVC 和可怕的@Secured/RequestMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375753/

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