Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导审计被称为无限审计_Java_Spring Boot - Fatal编程技术网

Java Spring引导审计被称为无限审计

Java Spring引导审计被称为无限审计,java,spring-boot,Java,Spring Boot,我有一门审计课: @Component @EnableJpaAuditing public class AuditorAwareImpl implements AuditorAware<String> { private final SecurityService securityService; public AuditorAwareImpl(SecurityService securityService) { this.securityServ

我有一门审计课:

@Component
@EnableJpaAuditing
public class AuditorAwareImpl implements AuditorAware<String> {

    private final SecurityService securityService;

    public AuditorAwareImpl(SecurityService securityService) {
        this.securityService = securityService;
    }

    @Override
    @NonNull
    public Optional<String> getCurrentAuditor() {
        if (securityService.getAuthenticatedUser().isEmpty()) {
            return Optional.empty();
        }

        return Optional.of(securityService.getAuthenticatedUser().get().getMobilePhoneNumber());
    }
}
@组件
@启用JPA审核
公共类AuditorAwareImpl实现AuditorAware{
私人最终担保服务;
公共审计机构WAREIMPL(安全服务安全服务){
this.securityService=securityService;
}
@凌驾
@非空
公共可选getCurrentAuditor(){
if(securityService.getAuthenticatedUser().isEmpty()){
返回可选的.empty();
}
返回可选的.of(securityService.getAuthenticatedUser().get().getMobilePhonenNumber());
}
}
并提供安全服务:

@Service
public class SecurityService {

    private final UserRepository userRepository;

    public SecurityService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public Optional<User> getAuthenticatedUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication == null || authentication instanceof AnonymousAuthenticationToken) {
            return Optional.empty();
        }

        UserDetails authUser = (UserDetails) authentication.getPrincipal();
        return userRepository.findByMobilePhoneNumber(authUser.getUsername());
    }

}
@服务
公共类安全服务{
私有最终用户存储库用户存储库;
公共安全服务(用户存储库用户存储库){
this.userRepository=userRepository;
}
公共可选getAuthenticatedUser(){
身份验证=SecurityContextHolder.getContext().getAuthentication();
if(身份验证==null | |匿名身份验证令牌的身份验证实例){
返回可选的.empty();
}
UserDetails authUser=(UserDetails)身份验证。getPrincipal();
返回userRepository.findByMobilePhoneNumber(authUser.getUsername());
}
}
当我试图更新一个实体时,这两个类被无限地调用,结果是堆栈溢出

我使用Java11和SpringBoot2.3.4.0版本


如何修复该循环递归以避免它?

一种方法是在您的服务中的
@Autowired
位置添加
@Lazy
注释。这是因为如果您的组件上没有
@Lazy
,那么将被急切地注入bean。因此,请尝试以下方法,它应该可以正常工作:

@Component
@EnableJpaAuditing
public class AuditorAwareImpl implements AuditorAware<String> {

    @Lazy
    @Autowired
    private final SecurityService securityService;
   
    .....
}
@组件
@启用JPA审核
公共类AuditorAwareImpl实现AuditorAware{
@懒惰的
@自动连线
私人最终担保服务;
.....
}

我认为这是
组件上的堆栈溢出,对吗?