gpt4 book ai didi

java - Spring 安全: How to authorize user for a given URL when using multiple `http` elements?

转载 作者:行者123 更新时间:2023-12-01 14:21:07 35 4
gpt4 key购买 nike

我有一个以模块化方式构建的 Spring MVC Web 应用程序。添加到网站的每个模块都可以定义自己的安全元素(在 xml 中使用 http 命名空间)以进行用户授权,这很好并且有效。

我现在需要以编程方式检查当前用户是否有权访问给定的 URL。我搜索了又搜索,发现了很多对WebInvocationPrivilegeEvaluator的引用。 ,这会很棒,但我的应用程序目前有 6 个,而且我不确定使用哪一个(它有 6 个 <http: 元素)。我尝试循环所有 6 个并对每一个执行检查,但这会返回奇怪的结果。

示例:

我可以使用以下方法获取所有 bean :

private Collection<WebInvocationPrivilegeEvaluator> privEvals;
....
privEvals = (List<WebInvocationPrivilegeEvaluator>) applicationContext.getBeansOfType(WebInvocationPrivilegeEvaluator.class).values();

循环检查如下:

public void checkForUrl(String url) {
for(WebInvocationPrivilegeEvaluator privEval:privEvals) {
System.out.println(privEval.isAllowed(url, SecurityContextHolder.getContext().getAuthentication()));
}
}

示例 1:用户获得 URL 授权,打印:


正确
正确
正确
正确

示例 2:同一用户未获得该 URL 的授权,打印:


正确
正确
正确
正确

但是如果我尝试浏览 URL,我会得到正确的 403对于第二个网址。

更新

如果我使用WebInvocationPrivilegeEvaluator的其他方法它接受上下文,我得到相同的结果。我尝试过许多不同的 URL http保护它们的元素,并返回相同的 boolean 值(以相同的顺序)。

如果我使用分配了不同角色的不同用户,我会遇到同样的问题,即不同网址的结果始终相同(当用户有权或无权访问它们时) ,除了这次打印以下内容:

正确
正确
正确

正确

更新

我尝试过使用<sec:authorize带有更奇怪结果的标签,看起来好像只是使用第一个 WebInvocationPrivilegeEvaluator .

最佳答案

旧帖子,但我遇到了这个问题,但没有找到真正的答案。我的实现是使用特定角色来选择良好的安全领域来识别该领域。

我同时获得了 WebInitationPrivilegeEvaluator 和 FilterSecurityInterceptor

    ApplicationContext context = AppContext.getApplicationContext(); 
Map<String, WebInvocationPrivilegeEvaluator> wipes = context.getBeansOfType(WebInvocationPrivilegeEvaluator.class);
Map<String, FilterSecurityInterceptor> filters = context.getBeansOfType(FilterSecurityInterceptor.class);

我浏览每个并在用于领域的特定角色上测试 FilterSecurityInterceptor :

    for (int i = 0; i < wipes.size(); i++) {
privilegeEvaluator=(DefaultWebInvocationPrivilegeEvaluator) wipes.values().toArray()[i];
FilterSecurityInterceptor filter = (FilterSecurityInterceptor) filters.values().toArray()[i];
if (filter.getSecurityMetadataSource().getAllConfigAttributes().toString().contains("hasRole('SPECIFIC_ROLE')")) return privilegeEvaluator;
}

关于java - Spring 安全: How to authorize user for a given URL when using multiple `http` elements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553508/

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