Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Sonatype Nexus (TM) Open Source Version Copyright (c) 2007-2012 Sonatype, Inc. All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the Eclipse Foundation. All other trademarks are the property of their respective owners.
 
 package org.sonatype.nexus.security.filter.authc;
 
 
 
 {
     public static final String AUTH_SCHEME_KEY = "auth.scheme";
 
     public static final String AUTH_REALM_KEY = "auth.realm";
 
     public static final String FAKE_AUTH_SCHEME = "NxBASIC";
 
     public static final String ANONYMOUS_LOGIN = "nexus.anonynmous";
 
     private final Logger logger = LoggerFactory.getLoggergetClass() );
 
     private boolean fakeAuthScheme;
 
     // this comes from attributes set by plexus helper listener (nexus-web-utils module)
     protected PlexusContainer plexusContainer;
 
     // this comes from Plexus IoC but we need to "lift" them manually, no injection here
 
     // this comes from Plexus IoC but we need to "lift" them manually, no injection here
 
     protected void onFilterConfigSet()
         throws Exception
     {
         super.onFilterConfigSet();
 
 
         // this might be null, at least the old removed code was prepared for it (why? when? -- cstamas)
         try
         {
         }
         catch ( ComponentLookupException e )
         {
              = null;
         }
 
     }
 
     protected PlexusContainer getPlexusContainer()
     {
         return ;
     }
 
     {
         return ;
     }
 
     protected Logger getLogger()
     {
         return ;
    }
    // TODO: this should be boolean, but see
    // http://issues.jsecurity.org/browse/JSEC-119
    public String isFakeAuthScheme()
    {
        return Boolean.toString );
    }
    // TODO: this should be boolean, but see
    // http://issues.jsecurity.org/browse/JSEC-119
    public void setFakeAuthSchemeString fakeAuthSchemeStr )
    {
        this. = Boolean.parseBooleanfakeAuthSchemeStr );
        if (  )
        {
            setAuthcScheme );
            setAuthzScheme );
        }
        else
        {
            setAuthcScheme. );
            setAuthzScheme. );
        }
    }
    @Override
    protected boolean onAccessDeniedServletRequest requestServletResponse response )
        throws Exception
    {
        // this will be true if cookie is sent with request and it is valid
        Subject subject = getSubjectrequestresponse );
        // NEXUS-607: fix for cookies, when sent from client. They will expire once
        // and we are not sending them anymore.
        boolean loggedIn = subject.isAuthenticated();
        if ( loggedIn )
        {
            return true;
        }
        if ( isLoginAttemptrequestresponse ) )
        {
            try
            {
                loggedIn = executeLoginrequestresponse );
            }
            // if no username or password is supplied, an IllegalStateException (runtime)
            // is thrown, so if anything fails in executeLogin just assume failed login
            catch ( Exception e )
            {
                getLogger().error"Unable to login"e );
                loggedIn = false;
            }
        }
        else
        {
            // let the user "fall thru" until we get some permission problem
            if ( getNexusConfiguration().isAnonymousAccessEnabled() )
            {
                loggedIn = executeAnonymousLoginrequestresponse );
            }
        }
        if ( !loggedIn )
        {
            sendChallengerequestresponse );
        }
        else
        {
            request.setAttributegetAuthcScheme() );
            request.setAttributegetApplicationName() );
        }
        return loggedIn;
    }
    @Override
    protected boolean isLoginAttemptString authzHeader )
    {
        // handle BASIC in the same way as our faked one
        String authzHeaderScheme = getAuthzScheme().toLowerCase();
        if ( authzHeader.toLowerCase().startsWith..toLowerCase() ) )
        {
            return true;
        }
        else
        {
            return super.isLoginAttemptauthzHeaderScheme );
        }
    }
    @Override
    protected boolean isRememberMeServletRequest request )
    {
        if ( request.getAttribute ) == null )
        {
            // it is not an anonymous login
            // return true;
            // NEXUS-607: fix for cookies, when sent from client. They will expire once
            // and we are not sending them anymore.
            return false;
        }
        else
        {
            // it is anon login. no rembemberMe
            return false;
        }
    }
    protected boolean executeAnonymousLoginServletRequest requestServletResponse response )
    {
        getLogger().debug"Attempting to authenticate Subject as Anonymous request..." );
        boolean anonymousLoginSuccessful = false;
        Subject subject = getSubjectrequestresponse );
        UsernamePasswordToken usernamePasswordToken =
                getNexusConfiguration().getAnonymousPassword() );
        try
        {
            request.setAttribute. );
            subject.loginusernamePasswordToken );
            anonymousLoginSuccessful = true;
        }
        catch ( UnknownSessionException e )
        {
            Session anonSession = subject.getSessionfalse );
            this.getLogger().debug(
                "Unknown session exception while logging in anonymous user: '{}' with principal '{}'",
                new Object[] { anonSessionsubject.getPrincipal(), e } );
            if ( anonSession != null )
            {
                // clear the session
                this.getLogger().debug"Logging out the current anonymous user, to clear the session." );
                try
                {
                    subject.logout();
                }
                catch ( UnknownSessionException expectedException )
                {
                    this..trace(
                        "Forced a logout with an Unknown Session so the current subject would get cleaned up."e );
                }
                // login again
                this.getLogger().debug"Attempting to login as anonymous for the second time." );
                subject.loginusernamePasswordToken );
                anonymousLoginSuccessful = true;
            }
        }
        catch ( AuthenticationException ae )
        {
            getLogger().info(
                "Unable to authenticate user [anonymous] from IP Address "
                    + RemoteIPFinder.findIP( (HttpServletRequestrequest ) );
            getLogger().debug"Unable to log in subject as anonymous"ae );
        }
        if ( anonymousLoginSuccessful )
        {
            getLogger().debug"Successfully logged in as anonymous" );
            postAuthcEventrequestgetNexusConfiguration().getAnonymousUsername(), getUserAgentrequest ), true );
            return true;
        }
        // always default to false. If we've made it to this point in the code, that
        // means the authentication attempt either never occured, or wasn't successful:
        return false;
    }
    private void postAuthcEventServletRequest requestString usernameString userAgentboolean success )
    {
        if (  != null )
        {
                username, RemoteIPFinder.findIP( (HttpServletRequestrequest ), userAgent ), success ) );
        }
    }
    @Override
    protected boolean onLoginSuccessAuthenticationToken tokenSubject subjectServletRequest request,
                                      ServletResponse response )
    {
        postAuthcEventrequesttoken.getPrincipal().toString(), getUserAgentrequest ), true );
        return true;
    }
    @Override
    protected boolean onLoginFailureAuthenticationToken tokenAuthenticationException aeServletRequest request,
                                      ServletResponse response )
    {
        postAuthcEventrequesttoken.getPrincipal().toString(), getUserAgentrequest ), false );
        HttpServletResponse httpResponse = WebUtils.toHttpresponse );
        if ( ExpiredCredentialsException.class.isAssignableFromae.getClass() ) )
        {
            httpResponse.addHeader"X-Nexus-Reason""expired" );
        }
        return false;
    }
    @Override
    public void postHandleServletRequest requestServletResponse response )
        throws Exception
    {
        if ( request.getAttribute. ) != null )
        {
            if ( request.getAttribute ) != null )
            {
                sendChallengerequestresponse );
            }
            else
            {
                if ( getLogger().isDebugEnabled() )
                {
                    final Subject subject = getSubjectrequestresponse );
                    String username;
                    if ( subject != null && subject.isAuthenticated() && subject.getPrincipal() != null )
                    {
                        username = subject.getPrincipal().toString();
                    }
                    else
                    {
                        username = getNexusConfiguration().getAnonymousUsername();
                    }
                    getLogger().debug(
                        "Request processing is rejected because user \"" + username + "\" lacks permissions." );
                }
                sendForbiddenrequestresponse );
            }
        }
    }

    
set http 403 forbidden header for the response

Parameters:
request
response
    protected void sendForbiddenServletRequest requestServletResponse response )
    {
        HttpServletResponse httpResponse = WebUtils.toHttpresponse );
        httpResponse.setStatus. );
    }
    // Will retrieve authz header. if missing from header, will try
    // to retrieve from request params instead
    @Override
    protected String getAuthzHeaderServletRequest request )
    {
        String authzHeader = super.getAuthzHeaderrequest );
        // If in header use it
        if ( !StringUtils.isEmptyauthzHeader ) )
        {
            getLogger().debug"Using authorization header from request" );
            return authzHeader;
        }
        // otherwise check request params for it
        else
        {
            authzHeader = request.getParameter"authorization" );
            if ( !StringUtils.isEmptyauthzHeader ) )
            {
                getLogger().debug"Using authorization from request parameter" );
            }
            else
            {
                getLogger().debug"No authorization found (header or request parameter)" );
            }
            return authzHeader;
        }
    }
    // work around to accept password with ':' character
    @Override
    protected String[] getPrincipalsAndCredentialsString schemeString encoded )
    {
        // no credentials, no auth
        if ( StringUtils.isEmptyencoded ) )
        {
            return null;
        }
        String decoded = Base64.decodeToStringencoded );
        // no credentials, no auth
        if ( StringUtils.isEmptyencoded ) )
        {
            return null;
        }
        String[] parts = decoded.split":" );
        // invalid credentials, no auth
        if ( parts == null || parts.length < 2 )
        {
            return null;
        }
        return new String[] { parts[0], decoded.substringparts[0].length() + 1 ) };
    }
    // ==
    protected Object getAttributeString key )
    {
        return getFilterConfig().getServletContext().getAttributekey );
    }
    private String getUserAgentfinal ServletRequest request )
    {
        if ( request instanceof HttpServletRequest )
        {
            final String userAgent = ( (HttpServletRequestrequest ).getHeader"User-Agent" );
            return userAgent;
        }
        return null;
    }
New to GrepCode? Check out our FAQ X