ExpiringUsernameAuthenticationToken和@AuthenticationPrincipal

时间:2017-07-21 13:24:43

标签: java spring spring-security single-sign-on saml

我在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();

我该如何解决这个问题? 提前致谢,对不起我的英语。

1 个答案:

答案 0 :(得分:2)

我在samlAuthenticationProvider中用forcePrincipalAsString = false解决了