Package org.uberfire.security.server.auth.source

Source Code of org.uberfire.security.server.auth.source.HttpServletRequestAuthenticationSource

package org.uberfire.security.server.auth.source;

import javax.security.auth.Subject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import org.uberfire.security.SecurityContext;
import org.uberfire.security.auth.Credential;
import org.uberfire.security.impl.auth.UserNameCredential;
import org.uberfire.security.impl.auth.UsernamePasswordCredential;
import org.uberfire.security.server.HttpSecurityContext;

import static org.uberfire.commons.validation.Preconditions.*;

public class HttpServletRequestAuthenticationSource extends JACCAuthenticationSource {

    @Override
    public boolean supportsCredential( final Credential credential ) {
        if ( credential == null ) {
            return false;
        }
        return credential instanceof UserNameCredential;
    }

    @Override
    public boolean authenticate( final Credential credential,
                                 final SecurityContext securityContext ) {
        try {
            final UserNameCredential userNameCredential = checkInstanceOf( "credential", credential, UserNameCredential.class );
            final HttpServletRequest request = ( (HttpSecurityContext) securityContext ).getRequest();

            if ( request.getUserPrincipal() != null ) {
                return true;
            }
            Subject subject = getSubjectFromContainer();
            if ( subject != null ) {
                return super.authenticate( credential, securityContext );
            }

            if ( userNameCredential instanceof UsernamePasswordCredential ) {

                try {
                    request.login( userNameCredential.getUserName(), ( (UsernamePasswordCredential) userNameCredential ).getPassword().toString() );
                    if ( subject == null ) {
                        return true;
                    }
                } catch ( final ServletException ex ) {
                    return false;
                }
            }
            return super.authenticate( credential, securityContext );
        } catch ( final Exception e ) {
            return false;
        }
    }

}
TOP

Related Classes of org.uberfire.security.server.auth.source.HttpServletRequestAuthenticationSource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.