「Java Base64のデコード」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
− | ==Java Base64のデコード== | + | ==[[Java Base64のデコード]]== |
====MimeUtilityを利用==== | ====MimeUtilityを利用==== | ||
− | [[Java]] | | + | [[Java]] | [[Category:コード片]] |
− | <blockquote> | + | <blockquote>[[Java]]8から標準ライブラリに含まれた</blockquote> |
*http://java.sun.com/j2ee/1.4/docs/api/javax/mail/internet/MimeUtility.html | *http://java.sun.com/j2ee/1.4/docs/api/javax/mail/internet/MimeUtility.html | ||
12行目: | 12行目: | ||
=====サーブレットフィルターで、Base64エンコードされたBasic認証情報を取得する例===== | =====サーブレットフィルターで、Base64エンコードされたBasic認証情報を取得する例===== | ||
− | public void doFilter( | + | public void doFilter(Servlet[[R]]equest request, Servlet[[R]]esponse response, FilterChain filterChain) throws IOException, ServletException { |
ByteArrayInputStream bin = null; | ByteArrayInputStream bin = null; | ||
− | + | Buffered[[R]]eader br = null; | |
try { | try { | ||
− | + | HttpServlet[[R]]equest http[[R]]eq = (HttpServlet[[R]]equest)request; | |
− | String basicAuthData = httpReq. | + | String basicAuthData = httpReq.get[[Header]]("authorization"); |
− | String basicAuthBody = basicAuthData.substring(6); // ex 'Basic | + | String basicAuthBody = basicAuthData.substring(6); // ex 'Basic dG9tY2F0On[[R]]vbWNhdA== ' |
bin = new ByteArrayInputStream(basicAuthBody.getBytes()); | bin = new ByteArrayInputStream(basicAuthBody.getBytes()); | ||
− | br = new | + | br = new Buffered[[R]]eader( |
− | new | + | new InputStream[[R]]eader(MimeUtility.decode(bin,"base64"))); |
StringBuilder buf = new StringBuilder(); | StringBuilder buf = new StringBuilder(); |
2020年2月16日 (日) 04:27時点における最新版
目次
Java Base64のデコード
MimeUtilityを利用
Java |
<blockquote>Java8から標準ライブラリに含まれた</blockquote>
から、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; } }
© 2006 矢木浩人