创建名为“webSecurityConfig”的Bean时出错,因为当我尝试将其自动连接到

所有spring mvc + hibernate + spring安全示例都说我需要创建MyUserService类,其中从springSecurity扩展了UserDetailsService,以将我的数据库与spring安全性绑定。但是当我这样做时,我得到:错误创建名为“webSecurityConfig”的bean没有定义这样的bean UserSerivce,当我尝试将其自动连接到SecurityConfig时,它尚不存在。当我下载任何在线示例时,给我同样的错误。


我在 Git 中的项目 - start_over分支。


我的网络安全配置类:


@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {



@Autowired

private UserService userService;



@Autowired

public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth.userDetailsService(userService).passwordEncoder(passwordEncoder());

}



@Override

protected 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();

}


@Bean

public PasswordEncoder passwordEncoder() {

    return new BCryptPasswordEncoder();

}

}


我的用户服务:


public interface UserService extends UserDetailsService {


    void save(User user);


    List<User> getAllUsers();

}

我的用户服务简单


@Service

public 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);


    }



小唯快跑啊
浏览 212回答 2
2回答

富国沪深

如果你的项目有多个像我这样的配置类,你应该为每个配置类定义注释。WebMvcConfigWebSecurityConfig@ComponentScan(basePackages = {"com.rjproject"})

开心每一天1111

1 :在你的情况下(javaconfig),你必须定义一个返回对象的Bean,它在哪里定义的?!userService2 :其他方式,我认为如果你在课堂上添加setter方法,那么问题就会得到解决!就像这样userServiceWebSecurityConfigpublic&nbsp;void&nbsp;setUserService(UserService&nbsp;userService){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.userService&nbsp;=&nbsp;userService; }下一步,在实现从接口的类时,您必须在类的上方添加注释,并将'value'属性设置为“userService”。UserService@Service@Service
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java