mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged 5.1.N (5.1.2) to 5.2.N (5.2.1)
129145 kroast: Merged 5.0.N (5.0.4) to 5.1.N (5.1.2) 128659 cpopa: Merged 5.0.2 (5.0.2.22) to 5.0.N (5.0.4) 128657 cpopa: MNT-15376 : NTLM authentication sometimes fails with IE10+ (chrome OK) - concurrent socket threads - Reuse the previously created NTLM details cache when a type1 request is being reissued on the same session. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129220 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -193,11 +193,11 @@ public abstract class BaseNTLMAuthenticationFilter extends BaseSSOAuthentication
|
||||
|
||||
// Check if an NTLM authorization header was received
|
||||
|
||||
if ( authHdr != null)
|
||||
if (authHdr != null)
|
||||
{
|
||||
// Check for an NTLM authorization header
|
||||
|
||||
if ( authHdr.startsWith(AUTH_NTLM))
|
||||
if (authHdr.startsWith(AUTH_NTLM))
|
||||
reqAuth = true;
|
||||
else if ( authHdr.startsWith( "Negotiate"))
|
||||
{
|
||||
@@ -252,7 +252,7 @@ public abstract class BaseNTLMAuthenticationFilter extends BaseSSOAuthentication
|
||||
|
||||
// If there is no login page configured (WebDAV) then just keep requesting the user details from the client
|
||||
|
||||
if ( hasLoginPage())
|
||||
if (hasLoginPage())
|
||||
redirectToLoginPage(sreq, sresp);
|
||||
else
|
||||
restartLoginChallenge(context, sreq, sresp);
|
||||
@@ -264,7 +264,7 @@ public abstract class BaseNTLMAuthenticationFilter extends BaseSSOAuthentication
|
||||
{
|
||||
// Check for a ticket based logon, if enabled
|
||||
|
||||
if ( allowsTicketLogons())
|
||||
if (allowsTicketLogons())
|
||||
{
|
||||
// Check if the request includes an authentication ticket
|
||||
|
||||
@@ -288,6 +288,7 @@ public abstract class BaseNTLMAuthenticationFilter extends BaseSSOAuthentication
|
||||
}
|
||||
else
|
||||
{
|
||||
HttpSession session = sreq.getSession();
|
||||
// Decode the received NTLM blob and validate
|
||||
final byte[] ntlmByts = Base64.decodeBase64(authHdr.substring(5).getBytes());
|
||||
int ntlmTyp = NTLMMessage.isNTLMType(ntlmByts);
|
||||
@@ -295,21 +296,27 @@ public abstract class BaseNTLMAuthenticationFilter extends BaseSSOAuthentication
|
||||
{
|
||||
// Process the type 1 NTLM message
|
||||
Type1NTLMMessage type1Msg = new Type1NTLMMessage(ntlmByts);
|
||||
processType1(type1Msg, sreq, sresp);
|
||||
synchronized (session)
|
||||
{
|
||||
processType1(type1Msg, sreq, sresp);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else if (ntlmTyp == NTLM.Type3)
|
||||
{
|
||||
// Process the type 3 NTLM message
|
||||
Type3NTLMMessage type3Msg = new Type3NTLMMessage(ntlmByts);
|
||||
return processType3(type3Msg, context, sreq, sresp);
|
||||
synchronized (session)
|
||||
{
|
||||
return processType3(type3Msg, context, sreq, sresp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (getLogger().isDebugEnabled())
|
||||
getLogger().debug("NTLM blob not handled, redirecting to login page.");
|
||||
|
||||
if ( hasLoginPage())
|
||||
if (hasLoginPage())
|
||||
redirectToLoginPage(sreq, sresp);
|
||||
else
|
||||
restartLoginChallenge(context, sreq, sresp);
|
||||
@@ -339,8 +346,9 @@ public abstract class BaseNTLMAuthenticationFilter extends BaseSSOAuthentication
|
||||
ntlmDetails = (NTLMLogonDetails)session.getAttribute(NTLM_AUTH_DETAILS);
|
||||
|
||||
// Check if cached logon details are available
|
||||
if (ntlmDetails != null && ntlmDetails.hasType2Message() &&
|
||||
ntlmDetails.hasNTLMHashedPassword() && ntlmDetails.hasAuthenticationToken())
|
||||
if (ntlmDetails != null &&
|
||||
ntlmDetails.hasType2Message() &&
|
||||
((nltmAuthenticator.getNTLMMode() == NTLMMode.PASS_THROUGH && ntlmDetails.hasAuthenticationToken()) || !ntlmDetails.hasAuthenticationToken()))
|
||||
{
|
||||
// Get the authentication server type2 response
|
||||
Type2NTLMMessage cachedType2 = ntlmDetails.getType2Message();
|
||||
|
Reference in New Issue
Block a user