@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final Log log = LogFactory.getLog(WebSecurityConfig.class);
@Value("${spring.profiles.active}")
private String env;
@Value("${rememberMe.privateKey}")
private String rememberMeKey;
@Resource
private UserDetailsService userService;
@Bean
public RememberMeServices rememberMeServices() {
TokenBasedRememberMeServices rememberMeServices = new TokenBasedRememberMeServices(rememberMeKey, userService);
// See http://stackoverflow.com/questions/25565809/implementing-a-remember-me-for-spring-social
rememberMeServices.setAlwaysRemember(true);
return rememberMeServices;
}
@Bean
public PasswordEncoder passwordEncoder() {
log.info("Creating password encoder bean");
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/",
"/signup",
"/public/**",
"https://stackoverflow.com/users/*",
"/auth/**").permitAll()
.anyRequest().authenticated();
http
.formLogin()
.loginPage("/signin")
.permitAll().and()
.rememberMe().key(rememberMeKey).rememberMeServices(rememberMeServices()).and()
.logout()
.deleteCookies("JSESSIONID")
.permitAll()
.and().apply(new SpringSocialConfigurer());
if (!env.equals("dev"))
http.requiresChannel().anyRequest().requiresSecure();
}
@Autowired
@Override
protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
authManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
}
}
配置的UserDetailsService到WebSecurityConfigurerAdapter作爲一個UserDetailsService我有以下幾點:不能使用Spring社會
@Service
@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
public class UserServiceImpl implements UserService, UserDetailsService, SocialUserDetailsService {
private final Logger log = Logger.getLogger(this.getClass());
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
@Autowired
public UserServiceImpl(UserRepository userRepository,
PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
@Override
public SocialUserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userRepository.findByEmail(username);
if (user == null)
throw new UsernameNotFoundException(username);
return new UserDetailsImpl(user);
}
@Override
public User findOne(long userId) {
User user = userRepository.findOne(userId);
return user;
}
@Override
@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public User signup(SignupForm signupForm) {
final User user = new User();
user.setEmail(signupForm.getEmail());
user.setName(signupForm.getName());
user.setPassword(passwordEncoder.encode(signupForm.getPassword()));
userRepository.save(user);
MyUtil.logInUser(user);
return user;
}
@Override
@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public void update(long userId, UserEditForm userEditForm) {
User user = userRepository.findOne(userId);
user.setName(userEditForm.getName());
userRepository.save(user);
}
@Override
public SocialUserDetails loadUserByUserId(String userId)
throws UsernameNotFoundException, DataAccessException {
return loadUserByUsername(userId);
}
}
,我發現了以下錯誤:
org.springframework.beans.factory.BeanCreationException :創建名爲'webSecurityConfig'的bean時出錯:注入資源依賴關係失敗;嵌套異常是org.springframework.beans.factory.UnsatisfiedDependencyException:在文件[/ home/hardddisk/applications/tomcat8/webapps/ROOT/WEB-INF/classes/com/kefet/controller /中定義名稱'userServiceImpl' UserServiceImpl.class]:通過類型爲[com.kefet.controller.UserRepository]:的索引爲0的構造方法參數表示的不滿足的依賴關係:未找到依賴關係的[com.kefet.controller.UserRepository]類型的限定bean:期望至少有一個bean這符合這種依賴關係的自動導向候選資格。依賴註釋:{};嵌套異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合要求的[com.kefet.controller.UserRepository]類型的限定bean:期望至少1個符合此依賴關係自動裝配候選資格的Bean。依賴註解:{} 在org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:311) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 在有機.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在org.springframework.beans.factory .support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:305) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRe (org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 在org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835) 在org.springframework.context。 support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) at org.springframework.web.context.ContextLoader.i nitWebApplicationContext(ContextLoader.java:328) 在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727) 在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase。 addChildInternal(ContainerBase.java:725) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945) at org.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig.java:1768) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask .run(FutureTask.java:266) at java.util。併發.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused通過:org.springframework.beans.factory.UnsatisfiedDependencyException:在文件[/ home/hardddisk/applications/tomcat8/webapps/ROOT/WEB-INF/classes/com/kefet/controller/UserServiceImpl中定義名稱'userServiceImpl' .class]:通過類型爲[com.kefet.controller.UserRepository]:的索引0的構造方法參數表示的不滿足的依賴關係:未找到依賴關係的[com.kefet.controller.UserRepository]類型的限定bean:期望至少有一個bean符合此依賴關係的自動導向候選人的資格。依賴註釋:{};嵌套異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合要求的[com.kefet.controller.UserRepository]類型的限定bean:期望至少1個符合此依賴關係自動裝配候選資格的Bean。依賴註解:{} 在org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 在org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 在org.springframework.beans .factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBe anFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:305) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230 ) 在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 在org.springframework .beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) at org.springframework.beans.factory.support 。 DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 在org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:508) 在org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:486) 在org.springframework.context.annotation.CommonAnnotationBeanPostProcessor $ ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:615) 在org.springframework.beans.factory.annotation.InjectionMetadata $ InjectedElement.inject(InjectionMetadata.java:169) 的組織。 springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.p ostProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308) ... 26更多 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合條件的[com.kefet.controller.UserRepository]類型的限定bean:期望至少爲1有資格作爲這個依賴關係的autowire候選者的bean。依賴註解:{} 在org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) 在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) 在org.springframework.beans.factory.support.DefaultListableBeanFactory。resolveDependency(DefaultListableBeanFactory.java:1014) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java: 741) ... 44更多
謝謝。
我試過所有的組合但是沒有工作 – kefet
然後分享我們UserRepository的代碼,它的包和配置類的包 – freakman
package com.kefet.controller; import org.springframework.data.jpa.repository.JpaRepository; 公共接口UserRepository延伸JpaRepository { \t \t 用戶findByEmail(字符串電子郵件); } –
kefet