Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring Security 2.0.6什么调用UserDetailService的loadUserByName方法_Spring Mvc_Spring Security_Dao - Fatal编程技术网

Spring mvc Spring Security 2.0.6什么调用UserDetailService的loadUserByName方法

Spring mvc Spring Security 2.0.6什么调用UserDetailService的loadUserByName方法,spring-mvc,spring-security,dao,Spring Mvc,Spring Security,Dao,我正在构建一个简单的Sring MVC应用程序。现在我正在尝试添加Spring安全性。我添加了一个customUserDetailsService,它使用DAO访问MySql数据库并获取用户 @Transactional(readOnly = true) public class CustomUserDetailService implements UserDetailsService { @EJB(name = "UserDAOLocal") UserDAOLocal dao

我正在构建一个简单的Sring MVC应用程序。现在我正在尝试添加Spring安全性。我添加了一个
customUserDetailsService
,它使用DAO访问MySql数据库并获取用户

@Transactional(readOnly = true)
public class CustomUserDetailService implements UserDetailsService {

    @EJB(name = "UserDAOLocal")
    UserDAOLocal dao = null;

    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
        System.out.println("Checking if this is invoked")
        UserDetails user = null;
        DBUsers dbUser = dao.findUserName(username);

        user = new User(dbUser.getUserName(), dbUser.getPassword(), true, true, true, true, getAuthorities(dbUser.getAccess()));
        return user;
    }

    private GrantedAuthority[] getAuthorities(Integer access) {

        GrantedAuthority[] authList = new GrantedAuthority[2];

        authList[0] = new GrantedAuthorityImpl("ROLE_USER");
        if (access.compareTo(1) == 0) {
            authList[1] = new GrantedAuthorityImpl(("ROLE_ADMIN"));

        }
        return authList;
    }
}
我已经将
UserDetailsService
添加到
Spring security.xml

  <security:authentication-manager alias="authenticationManager">
    <security:authentication-provider user-service-ref="customUserDetailsService"/>
</security:authentication-manager>

<bean id="customUserDetailsService" class="service.CustomUserDetailService"/>
我通过像这样编辑身份验证提供程序来解决这个问题。我决定不使用DAO和用户数据库。并在xml文件中使用硬编码用户

 <security:authentication-provider>
    <security:user-service>
        <security:user name="sam" password="sam123" authorities="ROLE_ADMIN,ROLE_USER" />
        <security:user name="pam" password="pam123" authorities="ROLE_USER" />
    </security:user-service>
</security:authentication-provider>

这很好用


但我想知道为什么我的customUserDetailService从未被使用,并了解如何正确使用它。

分享更多配置。从Spring-security.xml可以帮助您(如果可能的话)

Spring security的设计使身份验证提供程序调用返回userDetails对象的
UserDetailsService
方法的
loadUserByUsername()。
程序如下:

  • 身份验证管理器的任务是对用户进行身份验证。因此,它将用户名发送到
    身份验证提供程序

  • Authentication Provider
    调用
    loadUserByUsername()
    方法并传递返回
    userDetails
    对象的字符串类型的用户名

  • 现在,这个
    userDetails
    对象包含身份验证所需的所有信息,如用户名、密码、isEnabled等

现在,如果您想为使用
Dao
自定义
userdetails服务
,您可以自定义它

这就是身份验证过程的工作方式。
您可以参考此内容以获得更广泛的理解。

您可以在Web应用程序中启用调试日志以获取更多信息。您正在构建一个新的应用程序,但使用的是旧版本的Spring Security?你到底为什么要那样做?目前的版本是3.0.5@Sean Patrik Floyd,我正在学习一个教程。教程使用了该版本。我试着使用新版本。但是遇到了一些未知的问题。所以决定改用旧版本。此外,我正在努力学习Spring安全概念。不是细节。此外,身份验证管理器的别名有什么用途?起初,当我试图在服务器中部署EAR时,出现了一个部署错误,告诉我向身份验证管理器添加一个别名。
 <security:authentication-provider>
    <security:user-service>
        <security:user name="sam" password="sam123" authorities="ROLE_ADMIN,ROLE_USER" />
        <security:user name="pam" password="pam123" authorities="ROLE_USER" />
    </security:user-service>
</security:authentication-provider>