我正在尝试使用Spring Data,Spring Data JPA和Spring Data Rest提供不安全的DAO和安全的REST API。
例如,我有一个 DAO存储库,该存储库不应受到保护,因为我想从任何地方调用其方法而无需提供身份验证:
@RepositoryRestResource(exported = false, path = "persons")
public interface UserRepository extends JpaRepository<User, Long> {
int countByUsername(String username);
void deleteByUsername(String username);
Optional<User> findByUsername(String username);
}
我有一个 REST存储库,该存储库必须使用当前用户的授权必须保护:
@RepositoryRestResource(path = "persons")
@PreAuthorize("hasAuthority('FETCH_USER')")
public interface UserRestRepository extends PagingAndSortingRepository<User, Long> {
@PreAuthorize("hasAuthority('DELETE_USER')")
@Override
void delete(User user);
@PreAuthorize("hasAuthority('DELETE_USER')")
@Override
void deleteAll();
@PreAuthorize("hasAuthority('DELETE_USER')")
@Override
void deleteAll(Iterable<? extends User> iterable);
@PreAuthorize("hasAuthority('DELETE_USER')")
@Override
void deleteById(Long id);
@Override
Iterable<User> findAll();
@Override
Page<User> findAll(Pageable pageable);
@Override
Iterable<User> findAll(Sort sort);
@Override
Iterable<User> findAllById(Iterable<Long> iterable);
@Override
Optional<User> findById(Long id);
@PreAuthorize("hasAuthority('SAVE_USER')")
@Override
<S extends User> S save(S s);
@PreAuthorize("hasAuthority('SAVE_USER')")
@Override
<S extends User> Iterable<S> saveAll(Iterable<S> iterable);
}
这里的问题是,它似乎自动使用JpaRepository创建和配置REST服务,因此我被迫在其上添加exported = false
以仅公开REST存储库的方法,但是仍然存在问题,如果我想在REST服务上设置(到人员的)更改路径,则无法使用,我仍然需要在JpaRepository上复制它。
我不应该这样吗? 是否不可能创建单独的JpaRepository和PagingAndSortingRepository,一个用于DAO,另一个用于REST?
答案 0 :(得分:0)
使用Spring Security而非网络安全保护端点(URL) 方法。 javabullets.com/spring-security-spring-data-rest
请参见艾伦·海斯(Alan Hays)评论