单点登录cas常见问题(十二) - Principal的id对应数据库表中的哪个字段?

Principal.getId()拿到的用户id,默认是从Credential.getId()拷贝过来的,Principal实例主要是来自DefaultPrincipalFactory
DefaultPrincipalFactory.createPrincipal(final String id)
我们看一下QueryDatabaseAuthenticationHandler 是怎么调用DefaultPrincipalFactory.createPrincipal()的
class QueryDatabaseAuthenticationHandler extends AbstractJdbcUsernamePasswordAuthenticationHandler {
    @Override
    protected final HandlerResult authenticateUsernamePasswordInternal(final UsernamePasswordCredential credential)
            throws GeneralSecurityException, PreventedException {
        final String username = credential.getUsername();
        ......
        return createHandlerResult(credential, this.principalFactory.createPrincipal(username), null);
    }
}

可以看到Principal的id就是来自Credential.getId()
那么Credential的id又是从哪来的呢
UsernamePasswordCredential implements Credential{
.........
    public String getId() {
        return this.username;
    }
.........
}


从代码可以看到,UsernamePasswordCredential.getId()返回的就是用户登陆时在网页上输入的用户名username,而不是数据库表中user的id(整型数据),它是一个String类型。

你可能感兴趣的:(cas,单点登录)