Spring mvc Spring Security 2.0.6什么调用UserDetailService的loadUserByName方法
我正在构建一个简单的Sring MVC应用程序。现在我正在尝试添加Spring安全性。我添加了一个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
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>