Closed endypark closed 5 years ago
我在Filter中,如果 通过,则: set authentication,如下:
SecurityContextHolder.getContext().setAuthentication(new Authentication() { /**
*/
private static final long serialVersionUID = 6162391002484452337L;
@Override
public String getName() {
return null;
}
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
}
@Override
public boolean isAuthenticated() {
return false;
}
@Override
public Object getPrincipal() {
return SessionUtils.getSessionUser(request);
}
@Override
public Object getDetails() {
return null;
}
@Override
public Object getCredentials() {
return null;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
});
然后,再在 UserInfoHolder的实现类中 get authentication,如下: Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if(principal instanceof SessionUser) { String account = ((SessionUser) principal).getAccount(); return new UserInfo(account); } return new UserInfo(principal.toString());
这样应该可以吧?
接入SSO的思路如下,ctrip的实现使用反射是因为不想让开源代码依赖内部的jar包。
弱弱地问下,阿波罗目前有没有开箱即用的SSO接口,可以让我不修改阿波罗程序就可以单点登入到阿波罗呀?
@happyyangyuan
sso有多种实现,所以目前没有标准开箱即用的方式,ldap是有的。
@happyyangyuan
sso有多种实现,所以目前没有标准开箱即用的方式,ldap是有的。
好的,感谢
UserInfoHolder(Required), 我的 这个最终实现是: 1. 增加一个类 CustomThreadLocal, 里面有一个public static final ThreadLocal
over.
你们最后实现SSO了么
您好, CustomThreadLocal 的代码能参考下么
这个描述太模糊了吧,我看Ctrip的实现,也是用了一堆的反射,还是调用的sso远程。 1 . 这个是查询本地的User,还是查询SSO的当前登录用户,还是先本地再SSO,如果是SSO,那么就会碰到问题2 ?
由于查不到UserInfoHolder.getUser被什么方法调用了,具体干什么用的,所以自己也无法做更多理解,是否可以替换为 带参数的 getUser(param) 。