我在ADFS SSO和Spring Security集成方面遇到了一些问题。
SSO登录工作正常但当Authentication
对象存储在Spring Security处理的会话中时,类型为ExpiringUsernameAuthenticationToken
而不是UsernamePasswordAuthenticationToken
,即使它是直接子类,问题是由@AuthenticationPrincipal
绑定到Controller方法的当前用户是null
。
我已经实现了SAMLUserDetailsService
,我返回了一个完整的UserDetails
对象。
为了完整性而使用我将UserDetails
个完整Principal
用户转移到UsernamePasswordAuthenticationToken
ExpiringUsernameAuthenticationToken
属性,但只有一个字符串,其中包含" firstname lastname"将同一个Principal对象放入mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
Log.e("mTrackStatus",String.valueOf(mTrackStatus));
if (mTrackStatus == 1) {
Log.e("BACKGROUND=", "background Service Start");
//handler will call after every 10 seconds
context.startService(new Intent(context, BackgroundService.class));
mHandler.postDelayed(mRunnable, 10000);
} else if (mTrackStatus == 2) {
Log.d("StopTracking", "StopTracking");
context.stopService(new Intent(context, BackgroundService.class));
mHandler.removeCallbacks(mRunnable);
}
}
};
// mHandler.postDelayed(mRunnable, 10000);
mRunnable.run();
。
我该如何解决这个问题? 提前致谢,对不起我的英语。
答案 0 :(得分:2)
我在samlAuthenticationProvider中用forcePrincipalAsString = false解决了