- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以模块化方式构建的 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/
我是一名优秀的程序员,十分优秀!