关于SpringSecurity启动服务器报no bean named xxx available
关于SpringSecurity启动服务器报no bean named xxx available在使用springSecurity进行加密认证的过程中遇到了如下的一个错误如图中红框框起来的部分,报了一个No bean named ‘UserService’ available的异常,说是springIOC容器没有找到名字为userService的实例对象。一般遇到这个问题的第一反应是没有将use
·
关于SpringSecurity启动服务器报no bean named xxx available
在使用springSecurity进行加密认证的过程中遇到了如下的一个错误
如图中红框框起来的部分,报了一个No bean named ‘UserService’ available的异常,说是springIOC容器没有找到名字为userService的实例对象。
一般遇到这个问题的第一反应是没有将userService这个类交给IOC容器管理,于是小编打开了userService所在的userServiceImpl类,代码如下:
@Service("UserService")
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private RoleService roleService;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Override
public void save(SysUser user) {
String encode = passwordEncoder.encode(user.getPassword());
user.setPassword(encode);
userDao.save(user);
}
@Override
public List<SysUser> findAll() {
return userDao.findAll();
}
@Override
public Map<String, Object> toAddRolePage(Integer id) {
List<SysRole> allRoles = roleService.findAll();
List<Integer> myRoles = userDao.findRolesByUid(id);
Map<String, Object> map = new HashMap<>();
map.put("allRoles", allRoles);
map.put("myRoles", myRoles);
return map;
}
@Override
public void addRoleToUser(Integer userId, Integer[] ids) {
userDao.removeRoles(userId);
for (Integer rid : ids) {
userDao.addRoles(userId, rid);
}
}
/**
* 数据库认证
* @param username 用户在浏览器输入的用户名
* @author Admin
* @date 2021/1/8 22:19
* @return org.springframework.security.core.userdetails.UserDetails springsecurity自己的对象
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
//根据用户名做查询
SysUser sysUser = userDao.findByName(username);
if (sysUser == null) {
return null;
}
List<SysRole> roles = sysUser.getRoles();
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
// authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
//动态添加角色
for (SysRole role : roles) {
authorities.add(new SimpleGrantedAuthority(role.getRoleName()));
}
//{noop}后面的密码,springsecurity会认为是原文
UserDetails userDetails = new User(sysUser.getUsername(), sysUser.getPassword(),
authorities);
return userDetails;
} catch (Exception e) {
e.printStackTrace();
//springsecurity返回null默认失败
return null;
}
}
}
小编发现在UserServiceImpl类中,添加了@Service注解,也就是说UserServiceImpl类已经被交给IOC容器管理了,那是什么原因呢?
后来小编仔细看了下项目结构,发现了一个问题:
在小编的项目结构红框框起来的UserServiceImpl类的左上角有一个灰色的叉叉,小编想会不会是因为这个的原因导致项目启动的时候找不到UserServiceImpl类的Bean呢?
于是小编打开File --> Settings --> Build --> Compiler --> Exculdes发现Compiler右侧多了一行记录
至此,问题解决
更多推荐
已为社区贡献1条内容
所有评论(0)