如果您的身份驗證已使用SSO服務完成,那麼您應該使用spring security的pre-authentication filters之一。然後,你可以指定一個UserDetails服務(可能爲自定義),將使用預認證的用戶原則來填充的GrantedAuthority的
SpringSecurity包括幾個預認證過濾器,包括J2eePreAuthenticatedProcessingFilter和RequestHeaderPreAuthenticatedProcessingFilter。如果你找不到一個適合你的工具,那麼它也是可能的,而且你自己也不難編寫,只要你知道請求中的SSO實現填充數據的位置。 (這取決於課程的實施。)
只需實現Filter接口做這樣的事情在doFilter方法:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// principal is set in here as a header or parameter. you need to find out
// what it's named to extract it
HttpServletRequest req = (HttpServletRequest) request;
if (SecurityContextHolder.getContext().getAuthentication() == null) {
// in here, get your principal, and populate the auth object with
// the right authorities
Authentication auth = doAuthentication(req);
SecurityContextHolder.getContext().setAuthentication(auth);
}
chain.doFilter(request, response);
}
我更新了我的答案。 – 2009-08-24 18:01:40