spring security是记住用户通过用户名

时间:2016-03-05 13:51:02

标签: java spring authentication grails spring-security

简而言之:

我想知道用户名 - 用户名 - 是否经过身份验证。 我想知道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)记住我的身份验证时。

您怎么看?

0 个答案:

没有答案