トップ 一覧 ping 検索 ヘルプ RSS ログイン

Java Base64のデコードの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Java Base64のデコード

!MimeUtilityを利用
[Java]{{category コード片}}

""Java8から標準ライブラリに含まれた

*http://java.sun.com/j2ee/1.4/docs/api/javax/mail/internet/MimeUtility.html

*http://java.sun.com/products/javamail/index.jsp
から、javamail.zip をダウンロード

::サーブレットフィルターで、Base64エンコードされたBasic認証情報を取得する例
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    ByteArrayInputStream bin = null;
    BufferedReader br = null;
    try {
      HttpServletRequest httpReq = (HttpServletRequest)request;
      
      String basicAuthData = httpReq.getHeader("authorization");
      String basicAuthBody = basicAuthData.substring(6); // ex 'Basic dG9tY2F0OnRvbWNhdA== ' 
      
      bin = new ByteArrayInputStream(basicAuthBody.getBytes()); 
      br = new BufferedReader(
                  new InputStreamReader(MimeUtility.decode(bin,"base64")));
      
      StringBuilder buf = new StringBuilder();
      String line = null;
      while ((line = br.readLine())!=null) {
        buf.append(line);
      }
      String[] loginInfo = buf.toString().split(":");
    } catch (MessagingException e) {
      throw new ServletException(e);
    } finally {
      bin.close();
      br.close();
    }
    filterChain.doFilter(request, response);
  }

!InputStreamの内容をBase64にエンコードしたInputStreamに変換する例

 InputStream in = /* 入力元 */
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
 OutputStream out =MimeUtility.encode(baos, "base64");
 IOUtils.copy(in, out); 
 
 return new ByteArrayInputStream(baos.toByteArray()); /* 結果 */

!文字列をBase64 エンコードする
 import javax.mail.internet.MimeUtility;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 
 /**
  * 文字列を BASE64エンコードする
  * 
  * @param source 対象文字列
  * @param encode 対象文字列のエンコード(UTF-8,Shift-JISなど)
  * @return
  */
 public static String encodeBase64(String source, String encode) {
     try {
 
         StringBuilder sourceBuf = new StringBuilder(StringUtils.defaultString(source));
         int fillCnt = (sourceBuf.toString().length() % 4);
         for (int i = 0; i < fillCnt; i++) {
             sourceBuf.append(" ");
         }
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         OutputStream out = MimeUtility.encode(baos, "base64");
         IOUtils.copy(new StringInputStream(sourceBuf.toString(), encode), out);
 
         return (new String(baos.toByteArray(), "iso-8859-1"));
 
     } catch (Exception e) {
         return null;
     }
 }