所有spring mvc + hibernate + spring安全示例都說我需要創建MyUserService類,其中從springSecurity擴展了UserDetailsService,以將我的數據庫與spring安全性綁定。但是當我這樣做時,我得到:錯誤創建名為“webSecurityConfig”的bean沒有定義這樣的bean UserSerivce,當我嘗試將其自動連接到SecurityConfig時,它尚不存在。當我下載任何在線示例時,給我同樣的錯誤。我在 Git 中的項目 - start_over分支。我的網絡安全配置類:@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate UserService userService;@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(passwordEncoder());}@Overrideprotected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/login", "/").anonymous() .antMatchers("/admin", "/admin**").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin().loginPage("/login").permitAll() .and() .logout().logoutSuccessUrl("/login").permitAll() .and() .csrf().disable();}@Beanpublic PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder();}}我的用戶服務:public interface UserService extends UserDetailsService { void save(User user); List<User> getAllUsers();}我的用戶服務簡單@Servicepublic class UserServiceImp implements UserService{ @Autowired private UserDao userDao; @Transactional public void save(User user) { userDao.save(user); } @Transactional(readOnly = true) public List<User> getAllUsers() { return userDao.getAllUsers(); } @Transactional(readOnly=true) @Override public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { com.rjproject.entities.User user = userDao.findByUserName(username); List<GrantedAuthority> authorities = buildUserAuthority(user.getAuthorities()); return buildUserForAuthentication(user, authorities); }
2 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
如果你的項目有多個像我這樣的配置類,你應該為每個配置類定義注釋。WebMvcConfig
WebSecurityConfig
@ComponentScan(basePackages = {"com.rjproject"})

開心每一天1111
TA貢獻1836條經驗 獲得超13個贊
1 :在你的情況下(javaconfig),你必須定義一個返回對象的Bean,它在哪里定義的?!userService
2 :其他方式,我認為如果你在課堂上添加setter方法,那么問題就會得到解決!就像這樣userService
WebSecurityConfig
public void setUserService(UserService userService){ this.userService = userService; }
下一步,在實現從接口的類時,您必須在類的上方添加注釋,并將'value'屬性設置為“userService”。UserService
@Service
@Service
添加回答
舉報
0/150
提交
取消