- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先我想问一下,是否可以在 Java 配置中访问默认的 AccessDecisionManager
(不使用任何 xml 文件)?
次要的,我的问题看起来像那样。我想将 RoleVoter
添加到我的配置中,但我不知道该怎么做。
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
...
@Bean
public RoleHierarchy roleHierarchy() {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ADMIN > USER");
return roleHierarchy;
}
@Bean
public RoleHierarchyVoter roleHierarchyVoter(RoleHierarchy roleHierarchy){
return new RoleHierarchyVoter(roleHierarchy);
}
我的尝试是通过 authorizeRequests().accessDecisionManager(defaultAccessDecisionManager)
将我的 AffirmativeBased
管理器 bean 添加到 HttpSecurity
。
@Bean
public AffirmativeBased defaultAccessDecisionManager(RoleVoter roleVoter, AuthenticatedVoter authenticatedVoter, PreInvocationAuthorizationAdviceVoter preAdviceVoter){
AffirmativeBased affirmativeBased = new AffirmativeBased(Arrays.asList(new WebExpressionVoter,(AccessDecisionVoter) roleVoter));
affirmativeBased.setAllowIfAllAbstainDecisions(true);
return affirmativeBased;
}
但是由于 WebExpressionConfigAttribute
类总是在 getAttribute
方法上返回 null,所以在投票时失败了。
编辑:我想我明白了。我的尝试并没有错,这里是 defaultAccessDecisionManager
@Bean
public AffirmativeBased defaultAccessDecisionManager(RoleHierarchy roleHierarchy){
WebExpressionVoter webExpressionVoter = new WebExpressionVoter();
DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy);
webExpressionVoter.setExpressionHandler(expressionHandler);
return new AffirmativeBased(Arrays.asList((AccessDecisionVoter) webExpressionVoter));
}
但是,我仍然必须将此 defaultAccessDecisionManager
添加到配置中的每个 HttpSecurity
对象。有人知道如何在全局范围内做到这一点吗?
最佳答案
http
.requestMatchers().antMatchers("/**")
.authorizeRequests()
.antMatchers("/auth/**").permitAll()
.antMatchers("/admin/only").hasRole("ADMIN")
.anyRequest().authenticated()
.withObjectPostProcessor(new ObjectPostProcessor<AffirmativeBased>() {
@Override
public AffirmativeBased postProcess(AffirmativeBased affirmativeBased) {
affirmativeBased.getDecisionVoters().add(0, myAccessDecisionVoter1()); // add before WebExpressionVoter
affirmativeBased.getDecisionVoters().add(myAccessDecisionVoter2()); // add after WebExpressionVoter
return affirmativeBased;
}
});
关于java - AccessDecisionManager,如何添加RoleVoter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696401/
我见过here on GitHub默认配置使用如下优先级标签: 我在 AccessDecisionManager 中找不到对这个“优先级”的任何引用。本身。 priority对决策过程有
首先我想问一下,是否可以在 Java 配置中访问默认的 AccessDecisionManager(不使用任何 xml 文件)? 次要的,我的问题看起来像那样。我想将 RoleVoter 添加到我的配
我想在我的 spring 应用程序的授权过程中添加一些业务逻辑,我认为实现自定义 AccessDecisionVoter 是最好的解决方案。 那太好了,但我还没有找到任何方法在不完全重新定义 Acce
我只是好奇当我需要使用自定义 AccessDecisionManager 时我需要你们经验丰富的人提供一些用例,如果有人以前用过的话,谢谢。 最佳答案 Spring Security docs 中给出
我有以下情况:我的应用程序的授权机制是使用 Spring security 实现的。中央类实现了 AccessDecisionManager 并使用选民(每个选民都实现了 AccessDecision
我将基于 ([UserRoleRight]) 模型实现自定义授权,并且应该将权限与 Controller 和方法名称(例如“ Controller |方法”)进行比较。 我使用自定义 UserDeta
我正在尝试为受 Spring 安全保护的 servlet 实现 AccessDecisionManager,并且需要检查“Authorization” header 的内容。我有以下代码,但 head
我正在尝试使用 Java Config 设置一个 Spring Security 3.2 项目,根本不使用 XML。我想要一个支持 RoleHierarchyVoter 和 AclEntryVoter
自定义 AccessDecisionManager 不会在添加过滤器时或其他情况下被调用。理想情况下希望设置 filterBefore 和自定义 AccessDecisionManager(使用 Sp
下面是我的安全配置文件,我想将其更改为java配置 /changepassword
我们正在使用 Grails spring 安全插件: http://grails.org/plugin/spring-security-core 我只是想将默认访问决策管理器从默认的 Affirmat
我尝试使用 spring security 进行一些简单的记住我身份验证,但是当我尝试实现 accessDecisionManager 时发现此错误。这里是错误日志: org.springframew
我是一名优秀的程序员,十分优秀!