20210607のJavaに関する記事は4件です。

JavaのExceptionの中に特定のExceptionが含まれるか再帰的に調べるプログラミング

javaの例外(Exception)の中に特定の例外(Exception)が含まれているか、再帰的に調べるコードです。 containsExceptionメソッドの第一引数に特定の例外の型、第二引数に例外(Exception)を指定して呼び出し、特定の例外が含まれている場合trueを返し、含まれていない場合falseを返します。 第二引数がnullの場合、falseを返します。 第二引数がnullではなく、型が第一引数と同じ型の場合、trueを返します。 上記以外の場合、例外の中の例外(cause.getCause())を引数に自分自信を呼び出します。(再帰呼び出し) Utility.java package test; public class Utility { public static boolean containsException(Class<?> clazz, Throwable cause) { if (cause == null) { // 例外(cause)がnullの場合、falseを返す return false; } else if (clazz.isInstance(cause)) { // 例外(cause)の型が引数のclazzの場合、trueを返す return true; } else { // 上記以外の場合、例外(cause)の中に含まれる例外(cause.getCause())を引数に自分自身を呼び出す return containsException(clazz, cause.getCause()); } } }     以下は上記のcontainsExceptionメソッドを呼び出すMain関数の例です。 e3(Exception)は、e3(Exception)中にe2(IOException)が入っており、e2(IOException)の中にe1(SQLException)が入っている例外です。 第一引数のSQLException.class、第二引数にe3を指定して、containsExceptionメソッドを呼び出して、e3の中にSQLExceptionが含まれるか調べます。 含まれる場合true、含まれない場合falseが表示されます。 Main.java package test; import java.io.IOException; import java.sql.SQLException; public class Main { public static void main(String[] args) { Exception e1 = new SQLException("message e1"); Exception e2 = new IOException("message e2", e1); Exception e3 = new Exception("message e3", e2); boolean result = Utility.containsException(SQLException.class, e3); System.out.println("result=" + result); } } 結果 result=true 以上
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SpringBootポートフォリオ作成

理由・背景 SpringBootのポートフォリオを作成したいと思います。 テストが今回は非常に重要な要素です。 テーブル定義 URL設計 H2 application.properties mybatis.configuration.map-underscore-to-camel-case=true spring.datasource.url=jdbc:h2:mem:testdb 手順の確認 SpringoBootアプリケーション起動後 http://localhost:8080/h2console Githubにあげる ・ライセンス ・クラスの名前を実態に即したものにする。 ・targetは.gitignoreに入れてコミットしないようにする。 ・mainにあげるようにする。 AWS上にあげる ElasticBeanstalk package application.yml pom.xml TakeAway&今後 画面遷移は気をつける 日付をつける 審査完了フラグをつける アウトプット http://springmybatis-env.eba-fb6zgdsj.ap-northeast-1.elasticbeanstalk.com/ https://github.com/noikedan/spring-mybatis-crud 感想 GITはいいGUIツールあれば使ったほうがいいような気がします。 https://samuraism.com/2020/10/01/11854
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

最短の区間、最長の区間

尺取り法の写経。 最短を探す場合と最長を探す場合で左端と右端をインクリメントする条件分岐が異なる。 紙に書いて理解しようとしたり色々やってみたが結局写経であった。 覚書。 import java.util.Scanner; public class Main { public static void main(String[] args) { int n, m; int[] arr; Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); arr = new int[n]; for(int i=0; i<n; i++){ arr[i] = sc.nextInt(); } int sum = 0, ans = 1000000, l = 0, u = 0; sum += arr[0]; //最初の数で初期化 while(true){ if(m <= sum){ sum -= arr[l]; ans = Math.min(ans, u-l+1); l++; } else { u++; if(u == n){ break; } else { sum += arr[u]; } } } if(ans == 1000000){ //ansの初期値はデカい数 System.out.println(-1); } else { System.out.println(ans); } } } 最長距離を探すための尺取り法 import java.util.Scanner; public class Main { public static void main(String[] args) { int n, m; int[] arr; Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); arr = new int[n]; for(int i=0; i<n; i++){ arr[i] = sc.nextInt(); } int l=0, u=0, sum=0, ans=0; sum += arr[0]; while(true){ if(m < sum){ sum -= arr[l]; l++; } else { u++; ans = Math.max(ans, u-l); if(u == n){ break; } else { sum += arr[u]; } } } System.out.println(ans); } }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ユーザー認証

概要 Spring bootを例にユーザー認証時のパスワードの暗号化(ハッシュ化)についての扱いを紹介します。 依存関係 pom.xmlに下記の依存関係を追加します。 pom.xml <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId></dependency> <dependency> ハッシュ化アルゴリズム PasswordEncoderインターフェースの実装クラスが6つあります。 PasswordEncoderの実装クラス 概要 AbstractPasswordEncoder - NoOpPasswordEncoder ハッシュ化を行わないエンコーダ(テストなどで使用) Pbkdf2PasswordEncoder 設定可能な反復回数とランダムな8バイトランダムソルト値を使用してPBKDF2を使用するPasswordEncoderの実装 StandardPasswordEncoder SHA-256アルゴリズム + 1024回のストレッチでハッシュ化を行うエンコーダ BCryptPasswordEncoder bcryptアルゴリズムでハッシュ化を行うエンコーダ SCryptPasswordEncoder scryptアルゴリズムでハッシュ化を行うエンコーダ bcryptとは 認証で使用するパスワードを安全にハッシュ化するアルゴリズムです。 bcryptは60文字のハッシュ値を生成します。 また、このハッシュ値の中には下記4つの情報が含まれています。 bcryptのバージョン ストレッチング回数(ハッシュ化の回数で、2のn乗のnのことで4~31を指定できる) ソルト値 ハッシュ値 下記ハッシュ値を例に表にすると以下の表のようになります。 \$2a$10$E5J7SFVBbzynwgKPazA69uNN9lpn6zHq5om6a51FuoTqxo9KsxQHG 要素 実際の文字列 範囲 バージョン情報 $2 最初の$の後 ストレッチング回数 $10 2番目の$の後 ソルト値 $E5J7SFVBbzynwgKPazA69 3番目の$の後 実際のハッシュ値 uNN9lpn6zHq5om6a51FuoTqxo9KsxQHG 30文字目から最後 プログラムの実装例 eApplication.java package com.example; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @SpringBootApplication public class SpringBootEncodeApplication implements CommandLineRunner { @Autowired PasswordEncoder passwordEncoder; @Bean PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } public static void main(String[] args) { SpringApplication.run(SpringBootEncodeApplication.class, args); } @Override public void run(String... args) { String password = "123"; // PasswordEncoderのencodeメソッドを用いての平文のパスワードのハッシュ化 String hashedPassword = passwordEncoder.encode(password); System.out.println("hashedPassword : " + hashedPassword); // PasswordEncoderのmatchesメソッドを用いて平文パスワードとハッシュ化したパスワードの照合 if (passwordEncoder.matches(password, hashedPassword)) { System.out.println("it is match"); } System.out.println("it is not match"); } }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む