获取用户详细信息

在上一章节中介绍了如何获取用户的基础信息,如果希望访问到更详细的用户信息,那么需要自行实现一个 UserDetailsLookup 接口。

1. 实现 UserDetailsLookup 接口

下面是一个示例实现:

package hello.beans;

import hello.models.UserDetailsImpl;
import leap.core.annotation.Inject;
import leap.lang.http.HTTP;
import leap.lang.http.client.HttpClient;
import leap.lang.http.client.HttpResponse;
import leap.lang.json.JSON;
import leap.oauth2.webapp.token.AccessToken;
import leap.oauth2.webapp.user.UserDetailsLookup;
import leap.web.exception.InternalServerErrorException;
import leap.web.security.user.UserDetails;

public class RemoteUserDetailsLookup implements UserDetailsLookup {

    protected @Inject HttpClient httpClient;

    @Override
    public UserDetails lookupUserDetails(AccessToken at, String userId) {
        HttpResponse response = httpClient
                                    .request("http://localhost:8088/restd/user/" + userId)
                                    .send(HTTP.Method.GET);

        if(!response.isOk()) {
            throw new InternalServerErrorException("Unexpected response from remote user endpoint : " + response.getString());
        }

        String json = response.getString();

        return JSON.decode(json, UserDetailsImpl.class);
    }

}

这个示例实现需要接入到 debug-auth-server 才能使用。

2. 配置 UserDetailsLookup 生效

修改 src/main/resources/conf/beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.leapframework.org/schema/beans">

    ...

    <bean type="leap.oauth2.webapp.user.UserDetailsLookup"
          class="hello.beans.RemoteUserDetailsLookup" override="true" primary="true"/>

</beans>

框架中已经有一个内置的实现,需要加上 override="true" 表示覆盖已有的实现类。

上一篇:获取用户信息 下一篇:设置匿名访问

results matching ""

    No results matching ""