2014-05-09 12 views
185

Tôi đang làm việc để tích hợp Spring Security SAML Extension với Spring Boot.An mùa xuân trên Wildfly/Undertow: Lỗi thực hiện chuỗi lọc

tôi đã phát triển một ứng dụng mẫu hoàn chỉnh, tất cả các mã nguồn được công bố trên GitHub:

Bằng cách chạy các WebApp như ứng dụng Spring Boot (qua mùa xuân Tool Set, bởi sử dụng Máy chủ ứng dụng nhúng), nó hoạt động tốt. Thật không may, quá trình xác thực không hoạt động trên Undertow/WildFly (và tôi phải sử dụng nó làm AS sản xuất).

Bằng cách ghi nhật ký, tôi có thể thấy rằng IdP thực hiện quy trình AuthN và hướng dẫn triển khai UserDetails tùy chỉnh của tôi được thực thi chính xác. Mặc dù Spring không thiết lập các đặc quyền cho người dùng hiện tại.

@Component 
public class SAMLUserDetailsServiceImpl implements SAMLUserDetailsService { 

    // Logger 
    private static final Logger LOG = LoggerFactory.getLogger(SAMLUserDetailsServiceImpl.class); 

    @Override 
    public Object loadUserBySAML(SAMLCredential credential) 
      throws UsernameNotFoundException, SSOUserAccountNotExistsException { 
     String userID = credential.getNameID().getValue(); 
     if (userID.compareTo("[email protected]") != 0) {  // We're simulating the data access. 
      LOG.warn("SSO User Account not found into the system"); 
      throw new SSOUserAccountNotExistsException("SSO User Account not found into the system", userID); 
     } 
     LOG.info(userID + " is logged in"); 
     List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
     GrantedAuthority authority = new SimpleGrantedAuthority("ROLE_USER"); 
     authorities.add(authority); 
     ExtUser userDetails = new ExtUser(userID, "password", true, true, true, 
       true, authorities, "John", "Doe"); 
     return userDetails; 
    } 
} 

Bằng cách gỡ lỗi, tôi đã kiểm tra sự cố bắt đầu từ lớp FilterChainProxy. Khi tôi chạy ứng dụng web trên WildFly, tôi có thể thấy thuộc tính FILTER_APPLIED của ServletRequestnull, do đó, Spring xóa SecurityContextHolder.

private final static String FILTER_APPLIED = FilterChainProxy.class.getName().concat(".APPLIED"); 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
     throws IOException, ServletException { 
    boolean clearContext = request.getAttribute(FILTER_APPLIED) == null; 
    if (clearContext) { 
     try { 
      request.setAttribute(FILTER_APPLIED, Boolean.TRUE); 
      doFilterInternal(request, response, chain); 
     } finally { 
      SecurityContextHolder.clearContext(); 
      request.removeAttribute(FILTER_APPLIED); 
     } 
    } else { 
     doFilterInternal(request, response, chain); 
    } 
} 

On VMware vFabric tc SeverTomcat điều đó không xảy ra. Có cách nào để giải quyết vấn đề này không?

+2

Trong hầu hết các trường hợp, 'SecurityContextHolder' nên xóa sau khi yêu cầu. Mục đích duy nhất của mã đó là trong trường hợp chuỗi bộ lọc được áp dụng nhiều lần trong cùng một yêu cầu (trong trường hợp đó, chỉ có chuỗi gốc nên xóa ngữ cảnh). Vì vậy, tôi không nghĩ đó là một vấn đề. –

+2

BTW, hành vi này gây thương tích cho quá trình đăng nhập mỗi lần. Có cách nào để sửa chữa nó, ví dụ bằng cách cấu hình đúng phần mềm của tôi của AS? – vdenotaris

+1

Không chắc chắn ý của bạn là gì. Hành vi nào, và nó làm mất hiệu lực thông tin đăng nhập như thế nào? Xóa ngữ cảnh khi một luồng kết thúc xử lý một yêu cầu là hành vi bình thường - nó là điều cần thiết để ngăn chặn rò rỉ dữ liệu thread-local trở lại một nhóm luồng. Tại thời điểm đó bối cảnh thường nên được lưu trữ trong phiên của người dùng. Vì vậy, nó không nên làm mất hiệu lực đăng nhập. –

Trả lời

5

Điều tra sự cố Tôi đã nhận thấy rằng có một số mớ hỗn độn với cookie và tham chiếu trong yêu cầu xác thực.

xác thực Hiện nay wildfly sẽ làm việc nếu bạn thay đổi bối cảnh webapplication để Root Context:

<server name="default-server" default-host="webapp"> 
    <http-listener name="default" socket-binding="http"/> 
    <host name="default-host" alias="localhost" default-web-module="sso.war"/> 
</server> 

Sau khi khởi động wildfly và xoá cookie tất cả phải làm việc như mong đợi

Các vấn đề liên quan