JAVA関連のことを調べてみた

JAVA関連のことを調べてみた
目次

Spring Securityでログイン後のURLに付くcontinueクエリパラメータの正体

# 環境
– Spring Boot 3.2
– Spring Security 6.1

この記事の内容が該当するのは、Spring Security 5.8以降です。

# ある日気づいた
Spring Securityでログイン付きのWebアプリを作ってログインしたら、URLに`continue`というクエリパラメータが付いていました。

![スクリーンショット 2024-01-04 16.11.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58650/843d019f-26cc-5c26-b518-5bae20134cea.png)

こんなん付いてたっけ?と思ったので調べてみました。

# `RequestCache`とは
1. ログインが必要なURLにアクセス
1. 未ログインなのでログイン画面にリダイレクトされる
1. ログイン画面に正しいユーザー名・パスワードを入力
1. 認証完了後、1.でアクセスしたURLにリダイレクトされる

という流れは、認証付きのWebアプリでよくあります

元記事を表示

【データベース•学習ログ2】Javaからデータベースに接続し、テーブルを作成する

使用教材:侍テラコヤ『Javaとデータベースの連携方法を学ぼう』https://terakoya.sejuku.net/programs/129/chapters

## JavaからMySQLに接続する
《準備》
(1)MySQL Workbenchを導入
(2)データベースを作成
(3)eclipseでプロジェクトを立ち上げ、SQLを書き込むファイルを用意する

#### 1.JDBCよりクラスをインポート
“`java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
“`
* Connection … データベースとの接続を管理するクラス
* DriverManager … JDBCを取り扱うためのクラス
* SQLException … データベースの取り扱いで発生した例外を処理するクラス

#### 2.JDBCを用いてデータベースに接続
“`java
try {
// データベース接

元記事を表示

2024年初投稿

すっかりご無沙汰してしまいました。
まずはあけましておめでとうございます。
2024年、目標達成のため日々精進します。

元旦から続く悲しいニュースが続いて心が疲弊してます。
しばらくはデジタルデトックスし勉強に励みます。
Qiitaを更新していない期間、勉強していなかったので…
(勉強しなければ更新も書けない)

新年、気を引き締め直して参りましょう!!
どうぞよろしくお願いいたします。

元記事を表示

Java で Selenium と Jsoup でウェブブラウザ自動化とデータ抽出

# 1. はじめに

ウェブ開発の世界では、ブラウザの自動化やデータの抽出は日々の業務を効率化する上で欠かせない技術です。Javaを用いたSelenium WebDriverとJsoupライブラリを組み合わせることで、ブラウザを自動操作し、必要な情報を効率的に収集することができます。この記事では、Java, Selenium, とJsoupを使用してブラウザ自動化とデータ抽出を行う基本的な方法を紹介します。

# 2. Seleniumとは?

Seleniumは、ブラウザ操作を自動化するための一連のツールを提供します。開発者やテスターがコードを書いてブラウザの動作を自動化できるように、WebDriverというAPIを介して様々なブラウザと対話します。これは、主にウェブアプリケーションのテスト自動化に使用されますが、データのスクレイピングや自動化されたナビゲーションのためにも使用されます。

# 3. Jsoupとは?

Jsoupは、JavaのHTMLパーサーライブラリで、HTMLを解析し、操作し、クリーンナップし、HTMLからデータを抽出するためのメソッドを提供します。ウェブページ

元記事を表示

メッセージ、国際化

# メッセージ機能
– message.propertiesというメッセージ管理用ファイルを作成し、様々なメッセージを1か所で管理する。
そして、HTMLに該当データをキー値で呼んで使用させる。

– ファイルは/resources/message/propertiesに置けばよい。
“`
messages.properties

hello=こんにちは
hello.name=こんにちは {0} // パラメーターを設定する
“`
# 国際化機能
– message.propertiesを各国別に別途管理できる。
– message_en.propertiesなどでファイル名を変えて作れば良い。
“`
messages_en.properties

hello=hello
hello.name=hello {0}
“`
– 他のファイル名のメッセージファイルを登録したい場合は、application.propertiesにファイル名を登録しなければならない。
– S

元記事を表示

IntelliJ IDEA で Spring Boot アプリケーションを起動するまで

# はじめに
本記事では、IntellJ(IDE)を使用してSpring Bootアプリケーションを起動させるまでの手順を記述します。
※筆者はmacを使用していますが、WindowsおよびLinux等でも同様にできます(おそらく。。。)

## IntelliJ IDEA インストール + 起動
IntelliJをインストールする際は、IDEを管理してくれるToolbox Appというアプリケーションを使うと便利です。
1. 以下サイトにアクセスし、Toolbox Appをダウンロードします。
https://www.jetbrains.com/ja-jp/toolbox-app/
![スクリーンショット 2024-01-03 9.35.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624418/2d11d2b5-5781-f442-125d-5bc09ab1dd78.png)

2. インストーラに従いインストールします。
インストールが完了すると以下の画面が表示されていると

元記事を表示

Javaでタプルが使いたいと思ったので作成した

# ごあいさつ
あけましておめでとうございます。
今年もよろしくお願いします。
## 目標
本年は記事の投稿ペースを上げていきたいですね。
最悪一ヶ月に一回とか。

# 本題
では早速コード。
## コード
“`java:SimpleTuple.java
public static class SimpleTuple{
private A left;
private B right;

public SimpleTuple(A left, B right){
this.left = left;
this.right = right;
}

public A getLeft(){
return left;
}

public B getRight(){
return right;
}

public void setLeft(A left){
this.left = left;
}

public void s

元記事を表示

トリボナッチ数列 一般化を使って問題を解く

## トリボナッチ数列とは
最初の3つは 0, 1, 1 で、4つ目以降は”前3つを足したもの”
ex) 0 1 1 2 4 7 …

## コード java
“`java
class Solution {
public int tribonacci(int n) {
if(n ==0) return 0;
if(n<3) return 1; int []array = new int [n+1]; array[0]=0; array[1]=1; array[2]=1; for (int i=3; i <= n;i++){ array[i]=array[i-1]+array[i-2]+array[i-3]; } return array[n]; } } ``` 実行時間:0ms メモリー:40.38MB ### forループの初期化部分を省略 ```java class Solu

元記事を表示

Spring boot を のチュートリアルをやってみたpart1

# はじめに
記事を書いてる本人もJava歴1年未満&Spring framework歴数ヶ月の人間です
(フレームワークもろくに触ったことないです)

フレームワークを触るにあたって、チュートリアルのようなものがあるので、それを実践してわかったことや用語のまとめなどをしていきます。(忘備録のようなものだとおもってください)

# チュートリアルをやってみる
以下のリンクより、チュートリアルを実践できます
https://spring.io/guides/

最初の「RESTful Webサービスの構築」というのからまず取り組みます
(RESTfulなサービスとは?という方はこちらの記事をぜひ御覧ください
→https://qiita.com/o_q/items/0bb7963f87308f4ca4bc)

# 目標
「http://localhost:8080/greeting 」 にアクセスしたとき、HTTP GETが動き、以下のJSON形式の返答を受け取る
“`
{“id”:1,”content”:”Hello, World!”}
“`
URLの後ろに「?name=User」

元記事を表示

Spring Boot学習③~Spring Data JPAを使ってデータベースにアクセス~

前→https://qiita.com/19960417akiho/items/faf9b88b9b3348ef38ff

以下の動画を参考に、ハンズオン形式でSpring BootでWebアプリを制作していきます。

今回はPart8。
Spring Data JPAを使ってデータベースにアクセスします。

準備として、MySQLでIDとパスワードが入ったテーブルを準備しています。

![スクリーンショット 2023-12-28 162817.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114345/f925070c-3c1d-abf0-c75a-431b213ef8b6.png)

今回やることとしては、ログインフォームに入力された値と`user_info`テーブルの中のデータを照合して画面の表示を変えます。

元記事を表示

【Java】文字列をハッシュ化する

# はじめに

これまでに[PowerShell](https://qiita.com/nkojima/items/1daaebdbf39871725bcc)や[ExcelVBA](https://qiita.com/nkojima/items/89d2c53d34631b33d51e)、[DOSコマンド](https://qiita.com/nkojima/items/1dc5f021c9f34fefaf77)を使ってハッシュ値を求める方法を記事としてまとめましたが、今回はJavaで文字列をハッシュ化する方法を備忘録としてまとめてみました。

# 作成したコード

* Javaでハッシュ値を求める場合、MessageDigestというクラスを使います。
* `MessageDigest.getInstance()`でMessageDigestクラスのインスタンスを作りますが、この際にハッシュアルゴリズムの指定を誤ると`NoSuchAlgorithmException`、ハッシュアルゴリズムがnullだと`NullPointerException`が発生します。
* ハッシュアルゴ

元記事を表示

二分探索-leetcode Guess Number Higher or Lower

## 二分探索
検索対象と探索範囲の真ん中の値を比較して,探索範囲をだんだん半分に狭め、見つけるアルゴリズムです。

## 問題文
私たちは推測ゲームをしています。ゲームは次のとおりです。

1 から n までの数字を選択します。私が選んだ数字を当ててください。

あなたが間違った推測をするたびに、私が選んだ数字があなたの推測より高いか低いかを教えます。

事前定義された API intgues(int num) を呼び出すと、次の 3 つの可能な結果が返されます。

-1: あなたの推測は私が選んだ数字よりも大きいです (つまり、num > pick)。
1: あなたの推測は私が選んだ数字よりも小さいです (つまり、num < pick)。 0: あなたの推測は私が選んだ数字と同じです (つまり、num == pick)。 私が選んだ番号を返します。 ## コード java ```java /** * Forward declaration of guess API. * @param num your guess * @return -1 if num

元記事を表示

Lambda環境でのJavaのstaticについて

## 前提
pythonのコードでは関数外のコードは一度しか実行されないという記事を目にしたのでJavaのStaticについても同じ挙動なのか気になり検証した

## 検証
“` java
public class Cache {
private static Integer number = null;

public Cache(){}

public int get(){
if(number != null){
number++;
return number;
} else {
number = 0;
return number;
}
}
}

var cache = new Cache();
logger.info(“1回目の呼び出し cacheの番号: ” + cache.get());
logger.info(“2回目の呼び出し cacheの番号: ” + cache.get());
“`
上記の

元記事を表示

Java の UUID は符号付きで大小比較される

UUID を以下のパターンで比較してみます。
|format| uuid |
|:-:|:-:|
|基準| 018cc122-1a9d-7478-06e8-7a96ab18fea0 |
|MSB比較| X18cc122-1a9d-7478-06e8-7a96ab18fea0 |
|LSB比較| 018cc122-1a9d-7478-X6e8-7a96ab18fea0 |

“`Java
var uuid = UUID.fromString(“018cc122-1a9d-7478-06e8-7a96ab18fea0”);
var um1 = UUID.fromString(“118cc122-1a9d-7478-06e8-7a96ab18fea0”);
var um8 = UUID.fromString(“818cc122-1a9d-7478-06e8-7a96ab18fea0”);
var ul1 = UUID.fromString(“018cc122-1a9d-7478-16e8-7

元記事を表示

VScodeの拡張機能のError Lensは誤植等のエラーはもちろん、非推奨コードも指摘してくれる事が分かった件

結論:VScodeの拡張機能Error Lensが赤色メッセージ(=エラー)を吐いているときは実行しても動かないが、オレンジ色メッセージ(オレンジ)は非推奨なコードであって実行すると一応動く

以下、勝手に自分で混乱した流れ

前提 統合開発環境(IDE)は以下の記事に従い、VScodeで一本化して今はJavaの学習を主にしています。

Error Lens(VScode拡張機能)の概要

![Error_Lens.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/79bc7ac7-5626-c4d8-f3c2-9f9e7994f285.png)

**①コードを入力した時点で明らかなミス ⇒ 赤メッセージが該当箇所にでる**
**②アラート(※何を警告しているのかは場合によりけり)⇒ オレンジ色メッセー

元記事を表示

JavaでGoogle Custom Searchを活用する方法

# はじめに

Google Custom Searchは、特定のウェブサイトや複数のウェブサイト、あるいはインターネット全体からカスタマイズされた検索結果を取得するための強力なツールです。この記事では、Javaを使用してGoogle Custom Search APIにアクセスし、検索結果を取得する基本的な方法を説明します。

# 必要な準備

– Google Cloud Platformアカウント
– Google Custom Search Engineの設定
– APIキーと検索エンジンID

# 主なステップ

1. **リソースバンドルの作成**:
– `config.properties`ファイルに`google.apikey`と`google.custom.search.engine.id`を設定します。これにより、APIキーや検索エンジンIDなどの設定情報をプログラムから簡単に読み込むことができます。

2. **GoogleSearchServiceクラスの実装**:
– Javaで`GoogleSearchService`クラスを作成し、Google

元記事を表示

HttpSession

– Servletが公式支援するSessionで、一定時間使用しなければ該当Sessionを削除する機能などを提供する。
“`java
@PostMapping(“/login”)
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult,
HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return “login/loginForm”;
}

Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

if (loginMember == null) {
bindingResult.reje

元記事を表示

Session

– サーバーに重要な情報を保管し、接続を維持する方法である。
– 前のCookieの解決を解決するためには、重要な情報はすべてサーバに保存し、クライアントとサーバは **Session ID(推定不可能な任意の識別子値、UUID 等使用)** にて接続しなければならない。 この方法をSessionという。
“`java
@PostMapping(“/login”)
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) {
if (bindingResult.hasErrors()) {
return “login/loginForm”;
}

// 1. ユーザーがログイン情報(Login Form)を伝達すれば、サーバーで該当ユーザーであるか確認する。
Member loginMember = loginService.login(form.getLogi

元記事を表示

Cookieについて

– HTTP応答にCookieを入れてウェブブラウザに伝達すれば、以後ウェブブラウザでサーバーに要請する時、該当Cookieを継続的に送ってくれる。
– 永続的な CookieとセッションCookieがあるが、通常ブラウザ終了時にログアウトされることを期待するので、セッションCookieをお勧めする。
> 永続的な Cookie : 有効期限を入力すると、その日まで保持
> セッション Cookie : 有効期限を省略するとブラウザ終了時まで保持
“`java
@PostMapping(“/login”)
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) {
if (bindingResult.hasErrors()) {
return “login/loginForm”;
}

M

元記事を表示

サーバーからクライアントに配信するResponseデータを作成する3つの方法

## 1. 静的リソース
– ウェブブラウザに静的なHTML、css、jsを提供するときは静的リソースを使用する。
– **src/main/resources**はリソースを保管する場所であり、class pathの開始経路である。
– Spring Bootは、class pathの次のディレクトリにある静的リソースを提供する。
– **/static , /public , /resources , /META-INF/resources**
> 下記の経路にファイルが入っていれば
> src/main/resources/static/basic/hello-form.html
> ウェブブラウザで以下のように実行すればよい。
> http://localhost:8080/basic/hello-form.html

## 2. View Template
– ウェブブラウザに動的なHTMLを提供するときは、ビューテンプレートを使用する。
– **static/main/resources/templates**にビューテンプレートを

元記事を表示

OTHERカテゴリの最新記事