我正在構建一個簡單的Sring MVC應用程序。現在我正在嘗試添加Spring安全性。我添加了一個使用DAO訪問MySql數據庫並獲取用戶的customUserDetailsService
。Spring Security 2.0.6什麼調用UserDetailService的loadUserByName方法
@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"/>
我把j_spring_security_check
作爲行動的登錄表單login.jsp
頁面上。
當我輸入一個有效的用戶名和密碼時,應用程序總是告訴它是錯誤的。更重要的是,我找不到任何證據表明customUserDetailsService
隨時都在運行。 (我用System.out.println("Checking if this is invoked")
檢查服務器)。
什麼調用CustomUserDetailsService
的loadUserByUsername()
方法?什麼時候被調用?
我該如何配置它? (我提供的可能是不必要的:)所有的代碼)
編輯
: 這裏是其餘彈簧security.xml文件
<security:http auto-config="true">
<security:intercept-url pattern="/AddEmployee.htm" access="ROLE_ADMIN"/>
<security:intercept-url pattern="/FireEmployee.htm" access="ROLE_ADMIN"/>
<security:intercept-url pattern="/employees.htm" access="ROLE_USER"/>
<security:form-login login-page="/login.htm"
authentication-failure-url="/login.htm?error=true"
login-processing-url="/j_spring_security_check.htm"
default-target-url="/common.htm"/>
<security:logout
invalidate-session="true"
logout-success-url="/login.htm"
logout-url="/logout.htm"/>
</security:http>
我工作圍繞這一問題通過編輯認證像這樣的提供者。我決定不使用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從未使用過,並學習如何正確使用它。
您可以在您的webapp中啓用調試日誌以獲取更多信息。 – Raghuram 2011-03-17 11:19:47
您正在構建一個新的應用程序,但使用Spring Security的古老版本?你爲什麼要這樣做?目前的版本是3.0.5 http://static.springsource.org/spring-security/site/reference.html – 2011-03-17 15:14:57
@ Sean Patrik Floyd 我正在學習一個教程。該教程使用該版本。我嘗試使用新版本。但遇到了一些未知的標籤問題。因此決定改用舊版本。除了我正在學習Spring Security概念。不是具體的。 – 2011-03-21 07:24:23