我遇到了在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)。 –