[Yanel-dev] Migrating from Java 8 to Java 9 - Base 64

Michael Wechner michael.wechner at wyona.com
Mon Mar 5 12:10:03 EST 2018


Dear Balz

I have no committed the Base64 improvements inside the branch "base64",
whereas I have made the following changes:

git diff master..base64
diff --git
a/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
b/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
index a65c9df..2f1bac5 100644
--- a/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
+++ b/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
@@ -2007,7 +2007,7 @@ public class YanelServlet extends HttpServlet {
         }
 */
 
-        // HTTP BASIC Authentication (For clients such as for instance
Sunbird, OpenOffice or cadaver)
+        // HTTP BASIC Authentication (For clients such as for instance
Thunderbird Lightning, OpenOffice or cadaver)
         // IMPORT NOTE: BASIC Authentication needs to be checked on
every request, because clients often do not support session handling
         String authorizationHeader = request.getHeader("Authorization");
         if (log.isDebugEnabled()) log.debug("No identity attached to
session, hence check request authorization header: " + authorizationHeader);
@@ -2015,10 +2015,17 @@ public class YanelServlet extends HttpServlet {
             if (authorizationHeader.toUpperCase().startsWith("BASIC")) {
                 // Get encoded user and password, comes after "BASIC "
                 String userpassEncoded = authorizationHeader.substring(6);
-                // Decode it, using any base 64 decoder
-                sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
-                String userpassDecoded = new
String(dec.decodeBuffer(userpassEncoded));
-                log.debug("Username and Password Decoded: " +
userpassDecoded);
+                // INFO: Decode it, using base 64 decoder
+  
+                // DEPRECATED
+                //sun.misc.BASE64Decoder dec = new
sun.misc.BASE64Decoder();
+                //String userpassDecoded = new
String(dec.decodeBuffer(userpassEncoded));
+
+                java.util.Base64.Decoder decoder =
java.util.Base64.getMimeDecoder();
+                String userpassDecoded = new
String(decoder.decode(userpassEncoded));
+
+                log.debug("Username and Password decoded: " +
userpassDecoded);
+
                 String[] up = userpassDecoded.split(":");
                 String username = up[0];
                 String password = up[1];


It works for me locally with Java 8, testing BASIC authentication (for
example Thuderbird Calendar/Lightning).

Will test it later today on Java 9.

All the best

Michael

Am 05.03.18 um 15:02 schrieb Michael Wechner:
> Dear Balz
>
> Am 05.03.18 um 10:18 schrieb basZero:
>> Dear Michael,
>>
>> sounds good, but can you explain the reason why you upgrade to Java 9?
>> I think it only makes sense to upgrade, if you also upgrade to Tomcat
>> 9 (see http://tomcat.apache.org/whichversion.html )
>
> Because the laptop of my son is using Java 9 :-)
>
>> If somebody runs Yanel on Tomcat 8, Yanel won't work anymore.
>
> why not? I am not sure anymore whether you mentioned that before, but
> if so, can you tell me once again.
>>
>> In general, I'd appreciate a lot if Yanel would provide a branch for
>> each tomcat version.
>> The master branch will still (as today) contain the very latest code
>> and yanel users can choose what they want.
>>
>> So before you make the upgrade, please create a branch tomcat8 (or
>> something like that) so that the current tomcat8 version before your
>> upgrade is still easily available in future
>
> The only difference will be the Base64 implementation inside
> YanelServlet, so I think it will be backwards compatible.
>
> I will make a branch first anyway and let you know, such that you can
> test it as well.
>
> All the best
>
> Michael
>>
>> Cheers
>> Balz
>>
>> On Sun, Mar 4, 2018 at 1:12 PM, Michael Wechner
>> <michael.wechner at wyona.com> wrote:
>>
>>     Hi
>>
>>     I noticed that Java 9 on Mac does not provide anymore
>>     sun.misc.BASE64Decoder and that we have to replace it by
>>     java.util.Base64
>>
>>     -                sun.misc.BASE64Decoder dec = new
>>     sun.misc.BASE64Decoder();
>>     -                String userpassDecoded = new
>>     String(dec.decodeBuffer(userpassEncoded));
>>     +                //sun.misc.BASE64Decoder dec = new
>>     sun.misc.BASE64Decoder();
>>     +                //String userpassDecoded = new
>>     String(dec.decodeBuffer(userpassEncoded));
>>     +                // TODO: Migrate to java.util.Base64
>>     +                java.util.Base64.Decoder decoder =
>>     java.util.Base64.getMimeDecoder();
>>     +                String userpassDecoded = new
>>     String(decoder.decode(userpassEncoded));
>>
>>     I am currently testing this and if successful, would like to replace
>>     it...also see
>>
>>     https://stackoverflow.com/questions/35301409/migrating-from-sun-misc-base64-to-java-8-java-util-base64
>>     <https://stackoverflow.com/questions/35301409/migrating-from-sun-misc-base64-to-java-8-java-util-base64>
>>
>>     Any objections?
>>
>>     All the best
>>
>>     Michael
>>     --
>>     Yanel-development mailing list Yanel-development at wyona.com
>>     http://mx2.wyona.com/cgi-bin/mailman/listinfo/yanel-development
>>     <http://mx2.wyona.com/cgi-bin/mailman/listinfo/yanel-development>
>>
>>
>>
>>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mx2.wyona.com/pipermail/yanel-development/attachments/20180305/d53b4aa5/attachment.html>


More information about the Yanel-development mailing list