简而言之:
我想知道用户名 - 用户名 - 是否经过身份验证。
我想知道org.springframework.security.authentication.UsernamePasswordAuthenticationToken
但也要记住org.springframework.security.authentication.RememberMeAuthenticationToken
用户名/密码部分很简单:
class someService {
def userDetailsService
def sessionRegistry
boolean hasUserUserNameAndPasswordAuth(String username){
def principal = userDetailsService.loadUserByUsername(theUser.email, false)
userSession = sessionRegistry.getAllSessions(principal, false).find { !it.isExpired() }
if (userSession)
return true
else
return false
}
}
通过用户名和密码进行身份验证的所有用户将在上述功能中返回true。但是所有记住我的用户都会返回false。
即使这个方法调用sessionRegistry.getAllPrincipals()
也会返回一个列表,该列表不包含通过记住我的令牌进行身份验证的主体。
为什么sessionRegistry不会返回记住我身份验证的用户?他们也没有会议?!
为了记住我的身份验证,我玩了rememberMeServices
课程。此类有一个名为autoLogin(request, response)
的方法,它返回当前请求的身份验证。但这对我没有帮助,因为我想知道用户名给出的用户是否有有效的身份验证,而不是当前的身份验证
我想我有3个选择: a)找到你为什么sessionRegistry没有返回会话以记住我的身份验证
b)找到一个返回所有具有有效(从过期日期的角度来看)令牌的主体的服务
c)编写一个截取每个请求的过滤器并创建一个新会话 - 可以由sessionRegistry
找到 - 当用户根据调用rememberMeServices.autoLogin(request, response)
记住我的身份验证时。
您怎么看?