Spring boot 使用@ResourceRestRepository创建新存储库时,MicroService失败

Spring boot 使用@ResourceRestRepository创建新存储库时,MicroService失败,spring-boot,oauth-2.0,microservices,Spring Boot,Oauth 2.0,Microservices,我有两个带有@RepositoryRestResource的存储库,一个是UserRepository,一切正常,但是当我在同一高度添加新的RoleRepository时,一旦我删除RoleRepository一切正常,身份验证就会下降,我会留下代码,以便您可以帮助我,谢谢 //在zuul建立的地址 spring.application.name=service-zuul-server server.port=8090 #config for register client eurek

我有两个带有@RepositoryRestResource的存储库,一个是UserRepository,一切正常,但是当我在同一高度添加新的RoleRepository时,一旦我删除RoleRepository一切正常,身份验证就会下降,我会留下代码,以便您可以帮助我,谢谢

//在zuul建立的地址

    spring.application.name=service-zuul-server
server.port=8090

#config for register client
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

##Config path dynamic
#ruta para user
zuul.routes.user.service-id=service-user
zuul.routes.user.path=/api/user/**

#path for oauth
zuul.routes.security.service-id=service-oauth
zuul.routes.security.path=/api/security/**
zuul.routes.security.sensitive-headers=Cookie,Set-Cookie

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
ribbon.ConnectTimeout: 9000
ribbon.ReadTimeout: 30000
##config Zipkin
spring.sleuth.sampler.probability=1.0
spring.zipkin.base-url=http://localhost:9411/
spring.zipkin.sender.type=rabbit
用户存储库界面处于用户服务中

    package com.game.app.user.repository;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.query.Param;
    import org.springframework.data.rest.core.annotation.RepositoryRestResource;
    import org.springframework.data.rest.core.annotation.RestResource;
    import com.game.app.common.user.domain.Usuario;
    
    @RefreshScope
    @RepositoryRestResource(path = "user")
    
    public interface UserRepository extends JpaRepository<Usuario, Long> {
        // url=localhost:8090/api/user/user
        @RestResource(path = "find-username")
        public Usuario findByUserName(@Param("userName") String userName);
    
        @Query("select u from Usuario u where u.userName=?1")
        public Usuario buscarPorUsername(String userName);
    
    }
当我创建接口存储库时,它总是转到这个类,不再给我访问权限

@组成部分 公共类AuthenticationSuccessErrorHandler实现AuthenticationEventPublisher{ 私有日志记录器log=LoggerFactory.getLogger(AuthenticationSuccessErrorHandler.class); @自动连线 私人用益服务用益服务; @自动连线 私人环境署

@Autowired
private Tracer tracer;

@Override
public void publishAuthenticationSuccess(Authentication authentication) {
    if (!authentication.getName().equalsIgnoreCase(env.getProperty("config.security.oauth.client.id"))) {
        UserDetails userDetails = (UserDetails) authentication.getPrincipal();
        String mensaje = "Success Login:" + userDetails.getUsername();
        System.out.println(mensaje);
        log.info(mensaje);
        log.info("Authenticated" + authentication.getPrincipal());
        Usuario usuario = usuarioService.findByUserName(authentication.getName());
        if (usuario.getUserAttempts() != null && usuario.getUserAttempts() > 0) {
            usuario.setUserAttempts(0);
            usuarioService.update(usuario, usuario.getUserId());
        }
    } else {
        String mensaje = "Failed in Authentication!";
        System.out.println("=========="+mensaje+"===========");
        log.warn(mensaje);
    }

}

@Override
public void publishAuthenticationFailure(AuthenticationException exception, Authentication authentication) {
    String mensaje = "Error en el Login:" + exception.getMessage();
    log.error(mensaje);
    System.out.println(mensaje);
    try {
        StringBuilder errors=new StringBuilder();
        errors.append(mensaje);
        Usuario usuario = usuarioService.findByUserName(authentication.getName());
        if (usuario.getUserAttempts() == null) {
            usuario.setUserAttempts(0);

        }
        log.info("Intentos actual es de:" + usuario.getUserAttempts());
        usuario.setUserAttempts(usuario.getUserAttempts() + 1);
        log.info("Intentos después es de:" + usuario.getUserAttempts());
        errors.append(" - Intentos del login:" + usuario.getUserAttempts());
        if (usuario.getUserAttempts() >= 3) {
            String erroMaximosIntentos=String.format("El usuario %s des-habilitado por máximos intentos.", usuario.getUserName());
            log.error(erroMaximosIntentos);
            errors.append(" - " + erroMaximosIntentos);
            usuario.setUserEnabled(false);

        }
        usuarioService.update(usuario, usuario.getUserId());
        tracer.currentSpan().tag("error.mensaje", errors.toString());
    } catch (FeignException e) {
        System.out.println(e);
        log.error(String.format("El usuario %s no existe en el sistema", authentication.getName()));

    }

}
}

邮差请求 如果未找到RolRepository,则此请求有效,但创建RolRepository时会抛出错误 // http://localhost:8090/api/security/oauth/token

在调用JpaRepositoy(角色,Long)之前,检查此行中的值是否正确
if(!authentication.getName().equalsIgnoreCase(env.getProperty(“config.security.oauth.client.id”){
我采用这种方式,正如我前面提到的那样,它可以正常工作,并且还进行了双重调用,正如您在打印输出中看到的那样==============================================方法体publishAuthenticationSuccess==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================->=============================================================================================================================================================================================================================================================================================================================================第第第第第第第第========================礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼礼==========================================第第第第第第第第第第第第第第第第第第第第第第==========================================================================================第第第第第第第第第第第第第第第第第第第第第第第第==============================================================================================================作者阳离子.getName()->===============管理员===环境getProperty()->========================前端应用程序信息->.equalsIgnoreCase->===============假=================================================================================================================================================假成功登录:但当我添加JPpository时,它会导致此管理员打印结果
@Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/security/oauth/**").permitAll()
                .antMatchers(HttpMethod.GET, "/api/user/user").permitAll()
                .antMatchers(HttpMethod.POST, "/api/user/user").permitAll()
                .antMatchers(HttpMethod.GET, "/api/user/rol").permitAll()
                .antMatchers(HttpMethod.GET, "/api/user/user/{userId}").hasAnyRole("ADMIN", "USER")
                .antMatchers("/api/user/**").hasRole("ADMIN")
                .anyRequest()
                .authenticated()
                .and().cors()
                .configurationSource(corsConfigurationSource());
    }
@Autowired
private Tracer tracer;

@Override
public void publishAuthenticationSuccess(Authentication authentication) {
    if (!authentication.getName().equalsIgnoreCase(env.getProperty("config.security.oauth.client.id"))) {
        UserDetails userDetails = (UserDetails) authentication.getPrincipal();
        String mensaje = "Success Login:" + userDetails.getUsername();
        System.out.println(mensaje);
        log.info(mensaje);
        log.info("Authenticated" + authentication.getPrincipal());
        Usuario usuario = usuarioService.findByUserName(authentication.getName());
        if (usuario.getUserAttempts() != null && usuario.getUserAttempts() > 0) {
            usuario.setUserAttempts(0);
            usuarioService.update(usuario, usuario.getUserId());
        }
    } else {
        String mensaje = "Failed in Authentication!";
        System.out.println("=========="+mensaje+"===========");
        log.warn(mensaje);
    }

}

@Override
public void publishAuthenticationFailure(AuthenticationException exception, Authentication authentication) {
    String mensaje = "Error en el Login:" + exception.getMessage();
    log.error(mensaje);
    System.out.println(mensaje);
    try {
        StringBuilder errors=new StringBuilder();
        errors.append(mensaje);
        Usuario usuario = usuarioService.findByUserName(authentication.getName());
        if (usuario.getUserAttempts() == null) {
            usuario.setUserAttempts(0);

        }
        log.info("Intentos actual es de:" + usuario.getUserAttempts());
        usuario.setUserAttempts(usuario.getUserAttempts() + 1);
        log.info("Intentos después es de:" + usuario.getUserAttempts());
        errors.append(" - Intentos del login:" + usuario.getUserAttempts());
        if (usuario.getUserAttempts() >= 3) {
            String erroMaximosIntentos=String.format("El usuario %s des-habilitado por máximos intentos.", usuario.getUserName());
            log.error(erroMaximosIntentos);
            errors.append(" - " + erroMaximosIntentos);
            usuario.setUserEnabled(false);

        }
        usuarioService.update(usuario, usuario.getUserId());
        tracer.currentSpan().tag("error.mensaje", errors.toString());
    } catch (FeignException e) {
        System.out.println(e);
        log.error(String.format("El usuario %s no existe en el sistema", authentication.getName()));

    }

}