Spring boot 使用@ResourceRestRepository创建新存储库时,MicroService失败
我有两个带有@RepositoryRestResource的存储库,一个是UserRepository,一切正常,但是当我在同一高度添加新的RoleRepository时,一旦我删除RoleRepository一切正常,身份验证就会下降,我会留下代码,以便您可以帮助我,谢谢 //在zuul建立的地址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
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()));
}
}