gpt4 book ai didi

Spring MVC,方法级安全

转载 作者:行者123 更新时间:2023-12-04 18:24:28 25 4
gpt4 key购买 nike

我正在尝试根据用户角色限制对我的 Controller 的访问。现在我可以通过以下方式使用 security.xml 文件来做到这一点

<http use-expressions="true">
<intercept-url pattern="/**" access="hasRole([ROLE_ADMIN,ROLE_USER])" />
</http>

但我不想这样做。而我会写

<http use-expressions="true">
<intercept-url pattern="/**" access="isAuthenticated()"/>
</http>

在 Controller 中

@RequestMapping("/test")
@PreAuthorize("hasRole('ROLE_USER')")
public String test() {
return "test";
}

@RequestMapping("/testadmin")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String testAdminPage() {
return "testadmin";
}

现在 ROLE_USER 可以访问两个 (ROLE_ADMIN & ROLE_ USER) 标记的 Controller 。这就是问题。并且基于此 testadmin.jsp 只能被 ROLE_ADMIN 类型的用户查看并且 test.jsp 只能被“ROLE_USER”类型的用户查看。

总而言之,我不想在 xml 文件中编写访问代码,而是想从 Controller 控制它。

我该怎么做?

最佳答案

您必须通过

启用方法级安全性
<global-method-security pre-post-annotations="enabled"/>

然后你的 spring Controller 将被代理并且 PreAuthorize注释将被评估。

可以在此处找到更多信息(第 16.3 节):

http://docs.spring.io/spring-security/site/docs/current/reference/el-access.html

编辑:

我猜你的Controller Bean 正在 Disptacher Servlet(Web 上下文)中创建,您的安全配置位于根上下文中 -> Controller 将不受 BeanPostProcessor 的影响。所以你必须把<global-method-security> Web 上下文配置中的标记(dispatcher-servlet.xml?)

关于Spring MVC,方法级安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20593869/

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