diff --git a/scm-core/src/main/java/sonia/scm/web/filter/BasicAuthenticationFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/BasicAuthenticationFilter.java index ba3bcbe12d..ebafcb8059 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/BasicAuthenticationFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/BasicAuthenticationFilter.java @@ -35,7 +35,7 @@ package sonia.scm.web.filter; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.Objects; +import com.google.common.base.Charsets; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; @@ -62,6 +62,8 @@ import com.sun.jersey.core.util.Base64; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; + import java.util.Set; import javax.servlet.FilterChain; @@ -90,7 +92,7 @@ public class BasicAuthenticationFilter extends AutoLoginFilter private static final String ATTRIBUTE_FAILED_AUTH = "sonia.scm.auth.failed"; /** default encoding to decode basic authentication header */ - private static final String DEFAULT_ENCODING = "ISO-8859-1"; + private static final Charset DEFAULT_ENCODING = Charsets.ISO_8859_1; /** the logger for BasicAuthenticationFilter */ private static final Logger logger = @@ -127,6 +129,30 @@ public class BasicAuthenticationFilter extends AutoLoginFilter //~--- methods -------------------------------------------------------------- + /** + * Decode base64 of the basic authentication header. The method will use + * ISO-8859-1 to encode the base64 authentication header. + * + * + * @param request http request + * @param authentication base64 encoded basic authentication string + * + * @return decoded basic authentication header + * + * @see issue 627 + * @see Stackoverflow Basic Authentication + * + * @throws UnsupportedEncodingException + */ + protected String decodeAuthenticationHeader(HttpServletRequest request, + String authentication) + throws UnsupportedEncodingException + { + String token = authentication.substring(6); + + return new String(Base64.decode(token), DEFAULT_ENCODING); + } + /** * Method description * @@ -337,47 +363,6 @@ public class BasicAuthenticationFilter extends AutoLoginFilter return user; } - /** - * Decode base64 of the basic authentication header. The method tries to use - * the charset provided by the request, if the request does not send an - * contain an encoding the method will be fallback to ISO-8859-1. - * - * - * @param request http request - * @param authentication base64 encoded basic authentication string - * - * @return decoded basic authentication header - * - * @see issue 627 - * @see Stackoverflow Basic Authentication - * - * @throws UnsupportedEncodingException - */ - private String decodeAuthenticationHeader(HttpServletRequest request, - String authentication) - throws UnsupportedEncodingException - { - - String encoding = Objects.firstNonNull(request.getCharacterEncoding(), - DEFAULT_ENCODING); - - String token = authentication.substring(6); - - try - { - token = new String(Base64.decode(token.getBytes(encoding))); - } - catch (UnsupportedEncodingException ex) - { - logger.warn( - "encoding {} is not supported, use {} for decoding basic auth", - encoding, DEFAULT_ENCODING); - token = new String(Base64.decode(token.getBytes(DEFAULT_ENCODING))); - } - - return token; - } - //~--- fields --------------------------------------------------------------- /** scm main configuration */