我有一个简单的@RepositoryRestResource
,它为User
对象公开了一个REST接口。我的回购还包括通过电子邮件地址查找User
的自定义方法。我使用@PostAuthorize
来限制只有登录用户的访问权限。
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends JpaRepository<User, Long> {
@PostAuthorize("hasAuthority('ROLE_ADMIN') OR principal.id == returnObject.id")
@Query("SELECT u FROM User u WHERE u.email = :email")
User findUserByEmail(@Param("email") String email);
我还想在UserRepository.findUserByEmail
内使用UserDetailsService
进行身份验证。
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findUserByEmail(email);
由于findUserByEmail
使用PostAuthorize
进行注释,因此我的UserDetailsService
因为没有可用的主体而引发了身份验证异常。
有没有办法从Java代码中使用安全和导出的@RepositoryRestResource
?