【发布时间】:2014-11-16 08:10:07
【问题描述】:
我有一个实现 org.springframework.security.core.userdetails.UserDetailsService 的身份验证服务并定义为:
@Service
public class AuthService implements UserDetailsService {
// Autowires ..
@Override
//@Logged(successMessage = "User %s logged in")
public UserDetails loadUserByUsername(String username) { .. }
}
它被自动装配到 WebSecurityConfigurerAdapter 的扩展中,用于配置身份验证:
// Annotations ...
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthService authService;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
auth.userDetailsService(authService).passwordEncoder(encoder);
}
// Other security config stuff ...
}
最后,我创建了一个名为@Logged 的自定义注解,它被一个切面拾取,该切面围绕通知应用到被注解的方法并执行一些日志记录逻辑。让我们说,如果你只传递一个参数给它,它会记录成功的返回。
将@Logged 注解应用于覆盖的 AuthService.loadUserByUsername 方法会导致应用程序在启动时崩溃,并显示有关无法将 AuthService 自动连接到 SecurityConfig 的消息。如果我不将注释放在该覆盖方法上,一切都会完美无缺 - 身份验证工作(完成自动装配)并且日志注释在系统的其他部分工作。
问题
为什么会发生这种情况,可以解决吗?
我真的很想用我喜欢的日志注释来记录那个确切的方法。 谢谢:)
技术细节
带有 Boot 的 Spring 4,Jetty 9
堆栈跟踪(部分):
2014-09-22 12:41:05 WARN AbstractLifeCycle - 失败 org.springframework.boot.context.embedded.jetty.ServletContextInitializerConfiguration$InitializerListener@8bb473: org.springframework.beans.factory.BeanCreationException: 使用名称创建 bean 时出错'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration':自动装配依赖注入失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配方法:public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.setFilterChainProxySecurityConfigurer(org.springframework.security.config.annotation.ObjectPostProcessor, java.util.List) 抛出 java.lang.Exception;嵌套异常是 org.springframework.beans.factory.BeanExpressionException:表达式解析失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“securityConfig”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 com.bluepixelflag.services.AuthService com.bluepixelflag.config.SecurityConfig.authService;嵌套异常是 java.lang.IllegalArgumentException: Can not set com.bluepixelflag.services.AuthService field com.bluepixelflag.config.SecurityConfig.authService to com.sun.proxy.$Proxy90
【问题讨论】:
标签: spring spring-security spring-aop