java - Spring MVC 以编程方式登录 : No qualifying bean of type MyUserDetailsService

标签 java spring spring-mvc spring-security

我有一个带有 spring security 的 Spring 应用程序,一切都很好。当我尝试在注册时登录用户时,我无法让它工作......

我进行了很多搜索,发现我的主体是我的 UserDetails 对象,因此我需要一个通过 MyUserDetailsS​​ervice 中的用户名返回它的方法:

public class MyUserDetailsService implements UserDetailsService {

    private UserService userService;

    @Autowired(required=true)
    @Qualifier(value="userService")
    public void setUserService(UserService us){
        this.userService = us;
    }

    @Override
    public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {

        // Programmatic transaction management
        /*
        return transactionTemplate.execute(new TransactionCallback<UserDetails>() {

            public UserDetails doInTransaction(TransactionStatus status) {
                com.mkyong.users.model.User user = userDao.findByUserName(username);
                List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole());

                return buildUserForAuthentication(user, authorities);
            }

        });*/

        Users user = userService.findByUserName(username);
        List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRoleses());

        return buildUserForAuthentication(user, authorities);


    }

    // Converts com.mkyong.users.model.User user to
    // org.springframework.security.core.userdetails.User
    private User buildUserForAuthentication(Users user, List<GrantedAuthority> authorities) {
        return new User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities);
    }

    private List<GrantedAuthority> buildUserAuthority(Set<UserRoles> userRoles) {

        Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();

        // Build user's authorities
        for (UserRoles userRole : userRoles) {
            System.out.println("----------------------->"+userRole+"<---------------------------------------");
            setAuths.add(new SimpleGrantedAuthority(userRole.getRoles().getRole() ));
        }

        List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);

        return Result;
    }

在我的 Controller 上注册后,我尝试通过执行以下操作来登录用户:

             MyUserDetailsService myuds = new MyUserDetailsService();
             UserDetails ud = myuds.loadUserByUsername(user.getUsername());

//           Authentication authentication = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword(),
//                      AuthorityUtils.createAuthorityList("ROLE_CONCORRENTE"));
//           SecurityContextHolder.getContext().setAuthentication(authentication);

             Authentication authentication = new UsernamePasswordAuthenticationToken(ud, null);
             SecurityContextHolder.getContext().setAuthentication(authentication);

我什至自动连接了 beans:

   private MyUserDetailsService myUserDetailsService;
        @Autowired(required=true)
        @Qualifier(value="myUserDetailsService")
        public void setMyUserDetailsService(MyUserDetailsService userdetailsservice){
            this.myUserDetailsService = userdetailsservice;
        }

我的 bean :

<bean id="myUserDetailsService" class="com.setelog.spring.service.MyUserDetailsService" >
<property name="userService" ref="userService" />

    </bean>

最佳答案

这个案例可能存在很多问题 1)你是否定义了spring将在其中搜索bean的包 2)您是否将此类定义为服务(例如通过使用@service注释) 3)你有提供它的实现吗?

关于java - Spring MVC 以编程方式登录 : No qualifying bean of type MyUserDetailsService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31322687/

相关文章:

java - 使用 Spring MVC 在 webapp 中生成图表

Spring MVC,使用其他字段上传文件

spring-mvc - 自己的Spring OAuth2服务器以及3rdparty OAuth提供程序

JAVA TLS 1.2 降级到 TLS 1.0 有时会报错

java - 在 Eclipse 中生成一个包含外部库的 Jar

java - ListItem.onItemClickListener 与 CustomAdapter 无响应

java - Spring - 使用 CriteriaQuery (规范)的 OrderBy 关系属性会忽略没有关系的行

java - 如何为 Eclipse 工作区使用相对路径

Spring Security taglib 秒 :authorize with role hierarchy not working

spring - 在 spring 中分别识别数据库错误和查询错误