2016-08-26 51 views
1

得到的entityName或接口名稱通用信息庫,我想創建一個通用安全CRUD庫和註釋與預授權每一種方法,但我不能得到如何檢索實體類名如何規劃環境地政司在預授權

@NoRepositoryBean 
public interface AbstractEntityRepository<T extends AbstractEntity> extends CrudRepository<T, String> { 
    @Override 
    @PreAuthorize("hasPermission(null, #entityName, 'find'); 
    Iterable<T> findAll(); 
} 

public interface UserRepository extends AbstractEntityRepository<User> {} 

在這種情況下,entityName始終爲空。

@Component 
@Log 
public class CustomPermissionEvaluator implements PermissionEvaluator { 
    @Override 
    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) 
     log.fine("type " + targetType); // <- null 
     return true; 
    } 
... 

任何想法如何獲得「用戶」或「UserRepository」?

+0

我設法編寫一個自定義的類名解析器,但不知道這是一個最好的方法 – alex

回答

0
@Component 
public class ClassTypeResolver { 
    public static String resolve(Object object) { 
     if (AopUtils.isJdkDynamicProxy(object)) { 
      try { 
       return ((SimpleJpaRepository) ((Advised)object).getTargetSource().getTarget()).getDomainClass().getCanonicalName(); 
      } catch (Exception e) { 
       return null; 
      } 
     } else { 
      return ((SimpleJpaRepository) object).getDomainClass().getCanonicalName(); 
     } 
    } 
} 
相關問題