我遇到了在Spring Boot应用程序中通过Java配置设置ACL的问题。我已经创建了一个小型项目来重现问题。Spring Boot中的ACL安全性
我尝试了几种不同的方法。我遇到的第一个问题是EhCache,在我修正了这个问题后(我认为我做了),我再也无法登录了,看起来所有的数据都消失了。
有4类不同的配置:
ACLConfig1.class
ACLConfig2.class
ACLConfig3.class
ACLConfig4.class
所有@PreAuthorize
和@PostAuthorize
注释是否按预期工作,除了hasPermission
。
控制器拥有4个端点:一个是用户,一个用于管理,一个公共和最后一个,给了我头疼@PostAuthorize("hasPermission(returnObject,'administration')")
我敢肯定,在DB的插入是正确的。这个班级是我尝试过的最后一个四班之一:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class ACLConfig4 {
@Autowired
DataSource dataSource;
@Bean
public EhCacheBasedAclCache aclCache() {
return new EhCacheBasedAclCache(aclEhCacheFactoryBean().getObject(), permissionGrantingStrategy(), aclAuthorizationStrategy());
}
@Bean
public EhCacheFactoryBean aclEhCacheFactoryBean() {
EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean();
ehCacheFactoryBean.setCacheManager(aclCacheManager().getObject());
ehCacheFactoryBean.setCacheName("aclCache");
return ehCacheFactoryBean;
}
@Bean
public EhCacheManagerFactoryBean aclCacheManager() {
return new EhCacheManagerFactoryBean();
}
@Bean
public DefaultPermissionGrantingStrategy permissionGrantingStrategy() {
ConsoleAuditLogger consoleAuditLogger = new ConsoleAuditLogger();
return new DefaultPermissionGrantingStrategy(consoleAuditLogger);
}
@Bean
public AclAuthorizationStrategy aclAuthorizationStrategy() {
return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMINISTRATOR"));
}
@Bean
public LookupStrategy lookupStrategy() {
return new BasicLookupStrategy(dataSource, aclCache(), aclAuthorizationStrategy(), new ConsoleAuditLogger());
}
@Bean
public JdbcMutableAclService aclService() {
JdbcMutableAclService service = new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache());
return service;
}
@Bean
public DefaultMethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() {
return new DefaultMethodSecurityExpressionHandler();
}
@Bean
public MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = defaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new AclPermissionEvaluator(aclService()));
expressionHandler.setPermissionCacheOptimizer(new AclPermissionCacheOptimizer(aclService()));
return expressionHandler;
}
}
我在这里错过了什么?为什么我没有数据,如果我使用ACLConfig3.class或 ACLConfig4.class。有没有关于如何在Spring Boot中以编程方式配置的示例?
我有点被你的问题百思不得其解。是@PostAuthorize(“hasPermission(returnObject,'administration')”)'不是唯一的问题吗? – xnakos
@xnakos,Idealy数据需要被缓存。当管理工作时应该很容易通过DB – 5er
@ 5er设置读写权限您是否可以共享示例数据库条目以授权用户使用数据对象执行特定操作?我真的需要帮助[类似的主题](http://stackoverflow.com/questions/41872192/access-is-always-denied-in-spring-security-denyallpermissionevaluator?noredirect=1#comment72145872_41872192)。 –