- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Java Config 设置一个 Spring Security 3.2 项目,根本不使用 XML。我想要一个支持 RoleHierarchyVoter 和 AclEntryVoters 的访问决策投票器。这是我正在使用的配置:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AclEntryVoter aclUpdatePropertyVoter;
@Autowired
private AclEntryVoter aclDeletePropertyVoter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.and()
.logout()
.deleteCookies("JSESSIONID")
.logoutSuccessUrl("/")
.and()
.authorizeRequests()
.accessDecisionManager(accessDecisionManager())
.antMatchers("/login", "/signup/email", "/logout", "/search", "/").permitAll()
.anyRequest().authenticated();
}
@Bean
public RoleHierarchyVoter roleVoter() {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ROLE_USER > ROLE_ANONYMOUS");
RoleHierarchyVoter roleHierarchyVoter = new RoleHierarchyVoter(roleHierarchy);
return roleHierarchyVoter;
}
@Bean
public AffirmativeBased accessDecisionManager() {
List<AccessDecisionVoter> decisionVoters = new ArrayList<>();
WebExpressionVoter webExpressionVoter = new WebExpressionVoter();
decisionVoters.add(webExpressionVoter);
decisionVoters.add(roleVoter());
decisionVoters.add(aclDeletePropertyVoter);
decisionVoters.add(aclUpdatePropertyVoter);
AffirmativeBased affirmativeBased = new AffirmativeBased(decisionVoters);
return affirmativeBased;
}
}
但是,当应用程序初始化时,出现以下异常:
我得到异常:
java.lang.IllegalArgumentException: AccessDecisionManager does not support secure object class: class org.springframework.security.web.FilterInvocation
在调试代码时,我可以看到当调用 AbstractAccessDecisionManager 并执行以下代码时:
public boolean supports(Class<?> clazz) {
for (AccessDecisionVoter voter : this.decisionVoters) {
if (!voter.supports(clazz)) {
return false;
}
}
return true;
}
RoleHierarchyVoter 支持 FilterInvocation,但是 AclEntryVoters 无法传递它。我在配置中做错了什么?我如何设置项目以使其支持两种类型的选民?提前致谢
最佳答案
正如您所观察到的,acl 选民不支持过滤器调用,因为它们旨在检查安全方法,而不是 Web 请求。
您应该配置一个单独的 AccessDecisionManager
以用于您的方法安全性,并将 acl 选民添加到其中。
关于Spring security AccessDecisionManager : roleVoter, Acl 选民,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23734262/
我可以在其中一个项目中看到以下配置
在我正在工作的项目中,我们根据角色 ID 而不是角色描述进行身份验证,并且此映射存储在数据库中。 我的问题是,如何删除 Spring Security 的 RoleVoter 前缀以实现上述设计? 最
我正在尝试使用 Java Config 设置一个 Spring Security 3.2 项目,根本不使用 XML。我想要一个支持 RoleHierarchyVoter 和 AclEntryVoter
在 supports(Class clazz) RoleVoter的方法,它总是返回 true 说 This implementation supports any type of class, be
我们正在将应用程序从 Spring 3.0.1 升级到 Spring 4.1.6。我们还将 Spring Security Module 升级到 4.0.1 我们面临的问题是链接的访问。 小背景: 每
我是一名优秀的程序员,十分优秀!