我有一个spring security MVC应用程序。在少数JSP文件中,我的代码如下所示:
<sec:authorize access="hasAnyRole('ROLE_FOO', 'ROLE_BAR')">
<!--do something here-->
</sec:authorize>
在将应用程序部署到生产环境时,我必须更改代码(将ROLE_FOO
更改为其他内容),因为它具有不同的角色名称。所以我想知道是否有办法在属性文件中配置这些角色名称,然后选择<sec:authorize>
标记内的角色名称。
所以代码看起来像这样:
属性文件:
Admin_Roles = ROLE_FOO ROLE_BAR
和JSP
<sec:authorize access="hasAnyRole(<get roles from Admin_Roles in prop file>)">
<!--do something here-->
</sec:authorize>
顺便说一句,我使用Active Directory进行身份验证,因此这些角色已在活动目录中预先配置以进行测试和生产。
答案 0 :(得分:1)
不确定这是最简单的方法。但你可以写自己的表达。
此链接应该非常有用。 link
由于每个版本之间存在一些差异。您最好查看DefaultWebSecurityExpressionHandler
的源代码,以确保在覆盖createSecurityExpressionRoot
答案 1 :(得分:1)
不确定如何为可变数量的角色执行此操作,但对于固定数字,您是否尝试过类似的操作?
JSP:
<sec:authorize access="hasAnyRole('${adminRole1}', '${adminRole2}')">
<!--do something here-->
</sec:authorize>
控制器:
@Value("#{myprops.admin_role_1}"}
private String adminRole1;
@Value("#{myprops.admin_role_2}"}
private String adminRole2;
...
@RequestMapping("/hello")
public String hello(final Model model) {
model.addAttribute("adminRole1", adminRole1);
model.addAttribute("adminRole2", adminRole2);
...
}
和配置XML:
<bean id="myprops"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<!-- External property files -->
<value>file:${somepathvar}/adminroles.properties</value>
</list>
</property>
</bean>