加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:52:06 所属栏目:Java 来源:网络整理
导读:我在向控制器添加安全注释时遇到了很多问题. 事实证明让我的Controller实现一个InitializingBean是一个坏主意. public class MyController implements InitializingBean { @Secured(value="ROLE_ADMIN") @RequestMapping(method = RequestMethod.GET,value =
我在向控制器添加安全注释时遇到了很多问题.

事实证明让我的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 Annotation会起作用,但显然我不想这样做.
在网上浪费了大量时间之后,我注意到工作和非工作控制器之间的最后一个区别是它实现了InitializingBean接口.而现在这就像一个魅力:

public class MyController{

    @Secured(value="ROLE_ADMIN")
    @RequestMapping(method = RequestMethod.GET,@PathVariable("id") long id) {
        return "some view";
    }
}

任何人都可以帮我理解这种行为吗?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读