情景:一个项目之中,网站系统分前台展示系统与和后台用户操作日志管理系统,使用Spring boot +Jwt+Spring Security,前台和后台用户操作日志管理系统都需要登录、授权与认证,当前台的授权与认证与后台的授权与认证都 implements UserDetailService 时会报错,该怎么解决呢?
报错信息:2021-11-19 15:54:21 [main] ERROR o.s.boot.web.embedded.tomcat.TomcatStarter - Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name 'jwtAuthenticationTokenFilter': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.security.core.userdetails.UserDetailsService' available: expected single matching bean but found 2: backendUserServiceImpl,forntendUserServiceImpl
又看到这个鬼需求了,你完全可以自己参考DaoAuthenticationProvider实现AuthenticationProvider,这就完全自己掌控登录校验过程了,在authenticate方法中动态选择UserDetailService;
或者实现一个特殊的UserDetailService + @Primary,使用委托的方式,决定运行时具体选择哪个service去处理这个认证请求