package org.springframework.security.core.userdetails;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import java.io.Serializable;
import java.util.Collection;
/**
* 提供核心用户信息。
*
* <p>
* 出于安全目的,Spring Security不会直接使用实现。他们
* 只需存储用户信息,这些信息后来被封装到{@link Authentication}中
* 对象。这允许非安全相关的用户信息(如电子邮件地址、
* 电话号码等)存储在方便的位置。
* <p>
* 具体实施必须特别注意确保合同无效
* 执行每种方法的详细说明。看见
* {@link org.springframework.security.core.userdetails.User}参考
* 实现(您可能想在代码中扩展或使用)。
*
* @author 本·亚历克斯
* @see UserDetailsService
* @see UserCache
*/
public interface UserDetails extends Serializable {
// ~ Methods
// ========================================================================================================
/**
* 返回授予用户的权限。无法返回<code>null</code>。
*
* @return the authorities, sorted by natural key (ever <code>null</code>)
*/
Collection<? extends GrantedAuthority> getAuthorities();
/**
* 返回用于验证用户的密码。
*
* @return 密码
*/
String getPassword();
/**
* 返回用于验证用户的用户名。无法返回<code>null</code>。
*
* @return 用户名(永远不要<code>null</code>)
*/
String getUsername();
/**
* 指示用户的帐户是否已过期。过期的帐户不能
* 已认证。
*
* @return <code>true</code> 如果用户的帐户有效(即未过期),
* <code>false</code>如果不再有效(即过期)
*/
boolean isAccountNonExpired();
/**
* 指示用户是锁定还是解锁。锁定用户不能
* 已认证。
*
* @return <code>true</code>如果用户没有锁定,<code>false</code>否则
*/
boolean isAccountNonLocked();
/**
* 指示用户的凭据(密码)是否已过期。已过期
* 凭据阻止身份验证。
*
* @return <code>true</code> 如果用户的凭据有效(即未过期),
* <code>false</code>如果不再有效(即过期)
*/
boolean isCredentialsNonExpired();
/**
* 指示用户是启用还是禁用。禁用用户不能
* 已认证。
*
* @return <code>true</code>如果用户已启用,<code>false</code>否则
*/
boolean isEnabled();
}
package org.springframework.security.core.userdetails;
/**
*加载用户特定数据的核心界面。
* <p>
*它在整个框架中作为用户DAO使用,并且是
* {@link org.springframework.security.authentication.dao.DaoAuthenticationProvider
* DaoAuthenticationProvider}。
*
* <p>
*该接口只需要一种只读方法,这简化了对新
*数据访问策略。
*
* @see org.springframework.security.authentication.dao.DaoAuthenticationProvider
* @see UserDetails
*
* @author 本·亚历克斯
*/
public interface UserDetailsService {
// ~ Methods
// ========================================================================================================
/**
*根据用户名找到用户。在实际实施中,搜索
*可能区分大小写,也可能不区分大小写,具体取决于
*已配置实现实例。在这种情况下,<code>UserDetails</code>
*回来的对象可能有一个与什么情况不同的用户名
*实际上是要求的..
*
* @param用户名标识需要其数据的用户的用户名。
*
* @return一个完全填充的用户记录(永远不要<code>null</code>)
*
* @throws UsernameNotFoundException 如果找不到用户或用户没有
* Granted授权
*/
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}