获取用户详细信息
在上一章节中介绍了如何获取用户的基础信息,如果希望访问到更详细的用户信息,那么需要自行实现一个 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"
表示覆盖已有的实现类。