簡體   English   中英

Spring MVC以編程方式登錄:沒有類型為MyUserDetailsS​​ervice的合格Bean

[英]Spring MVC Login Programmatically: No qualifying bean of type MyUserDetailsService

我有一個具有Spring安全性的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;
    }

注冊后,在我的控制器上,我嘗試通過以下方式登錄用戶:

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

我什至把咖啡豆自動接線:

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

我的豆子:

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

    </bean>

在這種情況下可能會有很多問題:1)您是否已定義spring可以在其中搜索bean的包2)您是否將此類定義為服務(例如,通過使用@service注釋)3)您是否提供了其實現?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM