commit b5658b14094606b2f5b429351ad45368cebb4177
Author: zhangmeng <1334717033@qq.com>
Date: Wed Feb 15 17:08:22 2023 +0800
2023年2月15日17:08:06
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cc29507
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,39 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+.mvn
+mvnw.cmd
+mystyle-java-fx-tools.iml
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+/logs/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..97cc888
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,557 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.5.3
+
+
+ com.zhangmeng
+ mystyle-java-fx-tools
+ 0.0.1-SNAPSHOT
+ mystyle-java-fx-tools
+ mystyle-java-fx-tools
+
+
+ 17
+ 17
+ 4.1.48.Final
+ 1.2.75
+ 0.9.1
+ 1.2.5
+ 2.8.0
+ 2.0.8
+ 1.6.2
+ 1.13
+ 3.2.1
+ 3.9.1
+ 1.7
+ 3.17
+ 2.1.5
+ 1.3.0
+ 5.5.7
+ 2.8.5
+
+ 2.8.0
+ 3.11
+ 1.15
+ 3.2.2
+ 1.4
+ 2.9.0
+ 1.9.4
+
+ 1.27.0.0
+ 0.62.2
+ 2.5
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jdbc
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+ com.github.whvcse
+ easy-captcha
+ ${captcha.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+
+ tk.mybatis
+ mapper-spring-boot-starter
+ ${tk.mybatis.version}
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.version}
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+ commons-codec
+ commons-codec
+ ${commons-codec.version}
+
+
+
+ commons-collections
+ commons-collections
+ ${commons-collections.version}
+
+
+
+ commons-fileupload
+ commons-fileupload
+ ${commons-fileupload.version}
+
+
+
+ org.apache.commons
+ commons-pool2
+ ${commons-pool2.version}
+
+
+
+ commons-beanutils
+ commons-beanutils
+ ${commons-beanutils.version}
+
+
+ io.netty
+ netty-all
+ ${netty.version}
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ io.jsonwebtoken
+ jjwt
+ ${jwt.version}
+
+
+ net.oschina.zcx7878
+ fastdfs-client-java
+ ${fastdfs-client-java.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-bean-validators
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+ it.sauronsoftware
+ jave
+ 1.0.2
+
+
+ org.springframework
+ spring-test
+ 5.3.5
+ compile
+
+
+
+ org.bytedeco
+ javacpp
+ 1.5.2
+
+
+ org.bytedeco
+ javacv
+ 1.5.2
+
+
+ org.bytedeco
+ opencv-platform
+ 4.1.2-1.5.2
+
+
+ org.bytedeco
+ ffmpeg-platform
+ 4.2.1-1.5.2
+
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+
+ com.drewnoakes
+ metadata-extractor
+ 2.16.0
+
+
+ org.apache.xmlgraphics
+ batik-codec
+ ${apache.xmlgraphics.version}
+
+
+ org.apache.xmlgraphics
+ batik-css
+ ${apache.xmlgraphics.version}
+
+
+ org.apache.xmlgraphics
+ batik-svg-dom
+ ${apache.xmlgraphics.version}
+
+
+ org.apache.xmlgraphics
+ batik-svggen
+ ${apache.xmlgraphics.version}
+
+
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ ${dynamic.verion}
+
+
+
+ com.github.oshi
+ oshi-core
+ ${oshi.version}
+
+
+ org.apache.poi
+ poi
+ ${poi.version}
+
+
+
+
+ org.mybatis
+ mybatis-typehandlers-jsr310
+ 1.0.2
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ 2.9.7
+
+
+
+ commons-net
+ commons-net
+ 3.6
+
+
+
+
+ com.google.zxing
+ core
+ 3.3.3
+
+
+ com.google.zxing
+ javase
+ 3.3.3
+
+
+
+
+ com.google.code.gson
+ gson
+ ${gson-version}
+
+
+
+
+
+
+ org.zeroturnaround
+ zt-zip
+ 1.14
+
+
+
+
+
+ net.coobird
+ thumbnailator
+ 0.4.13
+
+
+
+
+
+
+ com.twelvemonkeys.imageio
+ imageio-jpeg
+ 3.7.0
+
+
+
+ com.twelvemonkeys.imageio
+ imageio-tiff
+ 3.7.0
+
+
+
+
+
+
+ com.lowagie
+ itext
+ 4.2.1
+
+
+
+ fr.opensagres.xdocreport
+ org.apache.poi.xwpf.converter.pdf
+ 1.0.6
+
+
+
+ net.sourceforge.jchardet
+ jchardet
+ 1.0
+
+
+
+ org.apache.poi
+ poi-scratchpad
+ 5.0.0
+
+
+
+
+
+ ws.schild
+ jave-all-deps
+ 3.1.1
+
+
+
+
+
+
+ com.vladsch.flexmark
+ flexmark
+ ${flexmark.version}
+
+
+
+
+ us.codecraft
+ webmagic-core
+ 0.7.5
+
+
+
+ us.codecraft
+ webmagic-extension
+ 0.7.5
+
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
+
+
+ com.arcsoft.face
+ arcsoft-sdk-face
+ 3.0.0.0
+
+
+
+
+ com.atlassian.commonmark
+ commonmark
+ 0.15.2
+
+
+
+ com.atlassian.commonmark
+ commonmark-ext-heading-anchor
+ 0.15.2
+
+
+
+ com.atlassian.commonmark
+ commonmark-ext-gfm-tables
+ 0.15.2
+
+
+
+ fr.brouillard.oss
+ commonmark-ext-notifications
+ 1.0.0
+
+
+
+ net.java.dev.jna
+ jna
+ 4.1.0
+
+
+
+
+ com.artofsolving
+ jodconverter
+ 2.2.1
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ io.micrometer
+ micrometer-registry-prometheus
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ 4.6.0
+
+
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ 2.2.1
+
+
+
+ net.sourceforge.tess4j
+ tess4j
+ 3.4.0
+
+
+ com.sun.jna
+ jna
+
+
+
+
+
+
+ io.minio
+ minio
+ 8.3.7
+
+
+ com.squareup.okhttp3
+ okhttp
+
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.8.1
+
+
+
+ joda-time
+ joda-time
+ ${joda-time.version}
+
+
+
+
+ org.openjfx
+ javafx-controls
+ 17.0.1
+
+
+
+ org.openjfx
+ javafx-base
+ 17.0.1
+
+
+
+ org.openjfx
+ javafx-graphics
+ 17.0.1
+
+
+
+ org.openjfx
+ javafx-fxml
+ 17.0.1
+
+
+
+ org.openjfx
+ javafx-web
+ 17.0.1
+
+
+
+ org.openjfx
+ javafx-media
+ 17.0.1
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/src/main/java/com/zhangmeng/tools/JavaFxToolsApplication.java b/src/main/java/com/zhangmeng/tools/JavaFxToolsApplication.java
new file mode 100644
index 0000000..f75fe62
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/JavaFxToolsApplication.java
@@ -0,0 +1,16 @@
+package com.zhangmeng.tools;
+
+import com.zhangmeng.tools.views.HomeView;
+import javafx.application.Application;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class JavaFxToolsApplication {
+
+ public static void main(String[] args) {
+// SpringApplication.run(JavaFxToolsApplication.class, args);
+ Application.launch(HomeView.class);
+ }
+
+}
diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java
new file mode 100644
index 0000000..9c20126
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java
@@ -0,0 +1,107 @@
+package com.zhangmeng.tools.controller;
+
+import com.zhangmeng.tools.utils.ResourcesUtils;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Node;
+import javafx.scene.control.Button;
+import javafx.scene.control.ListView;
+import javafx.scene.control.SplitPane;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.AnchorPane;
+import javafx.scene.layout.BorderPane;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Arrays;
+
+public class HomeController implements Serializable {
+
+ private SimpleObjectProperty menus = new SimpleObjectProperty<>();
+
+ private SimpleDoubleProperty width = new SimpleDoubleProperty(0.0);
+ private SimpleDoubleProperty height = new SimpleDoubleProperty(0.0);
+ private AnchorPane root;
+
+ @FXML
+ private ListView listView;
+
+ @FXML
+ private SplitPane splitPane;
+
+ @FXML
+ public void initialize() {
+ init();
+ listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
+ if (newValue != null) {
+ if (newValue.getIndex() == 0 ){
+ md5();
+ }
+ if (newValue.getIndex() == 1 ){
+ spring();
+ }
+ }
+ });
+ }
+
+
+ public void init() {
+ ResourcesUtils.Menu[] values = ResourcesUtils.Menu.values();
+ ObservableList list = FXCollections.observableArrayList();
+ list.addAll(Arrays.asList(values));
+ listView.setItems(list);
+
+ md5();
+ }
+
+ private void spring(){
+ try {
+ root = FXMLLoader.load(ResourcesUtils.getResource("spring-security"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ common_method();
+ }
+
+ private void common_method(){
+ splitPane.getItems().remove(1);
+ splitPane.getItems().add(1, root);
+ root.widthProperty().addListener((observable, oldValue, newValue) -> {
+ if (newValue != null) {
+ double width = splitPane.getWidth();
+ HomeController.this.width.set(width);
+ }
+ });
+ root.heightProperty().addListener((observable, oldValue, newValue) -> {
+ if (newValue != null) {
+ double height = splitPane.getHeight();
+ HomeController.this.height.set(height);
+ }
+ });
+
+ this.width.addListener((observable, oldValue, newValue) -> {
+ HomeController.this.root.setPrefWidth(newValue.doubleValue() - listView.getWidth());
+ });
+
+ this.height.addListener((observable, oldValue, newValue) -> {
+ HomeController.this.root.setPrefHeight(newValue.doubleValue() - listView.getHeight());
+ });
+ }
+
+ private void md5(){
+ //默认选择第一个
+ listView.getSelectionModel().select(0);
+ try {
+ root = FXMLLoader.load(ResourcesUtils.getResource("md5"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ common_method();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/zhangmeng/tools/controller/Md5Controller.java b/src/main/java/com/zhangmeng/tools/controller/Md5Controller.java
new file mode 100644
index 0000000..1875bc2
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/controller/Md5Controller.java
@@ -0,0 +1,42 @@
+package com.zhangmeng.tools.controller;
+
+import com.zhangmeng.tools.utils.EncryptUtils;
+import javafx.fxml.FXML;
+import javafx.scene.control.*;
+import javafx.stage.Modality;
+
+public class Md5Controller {
+
+ @FXML
+ private Button button;
+
+ @FXML
+ private TextField text_filed;
+
+ @FXML
+ private TextArea md5_32;
+
+ @FXML
+ private TextArea md5_16;
+
+ @FXML
+ public void initialize() {
+ button.setOnAction(event -> {
+ String text = text_filed.getText();
+ if (text.length() == 0){
+ alert();
+ return;
+ }
+ md5_32.setText(EncryptUtils.md5(text));
+ md5_16.setText(EncryptUtils.md5_16(text));
+ });
+ }
+
+ private void alert(){
+ Alert alert = new Alert(Alert.AlertType.WARNING);
+ alert.initModality(Modality.APPLICATION_MODAL);
+ alert.setContentText("请输入将要加密的字符!");
+ alert.setHeaderText(null);
+ alert.show();
+ }
+}
diff --git a/src/main/java/com/zhangmeng/tools/controller/SpringSecurityController.java b/src/main/java/com/zhangmeng/tools/controller/SpringSecurityController.java
new file mode 100644
index 0000000..25bf3ae
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/controller/SpringSecurityController.java
@@ -0,0 +1,41 @@
+package com.zhangmeng.tools.controller;
+
+import com.zhangmeng.tools.utils.EncryptUtils;
+import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextArea;
+import javafx.scene.control.TextField;
+import javafx.stage.Modality;
+
+public class SpringSecurityController {
+
+ @FXML
+ private Button button;
+
+ @FXML
+ private TextField text_filed;
+
+ @FXML
+ private TextArea textArea;
+
+ @FXML
+ public void initialize() {
+ button.setOnAction(event -> {
+ String text = text_filed.getText();
+ if (text.length() == 0){
+ alert();
+ return;
+ }
+ textArea.setText(EncryptUtils.spring_security(text));
+ });
+ }
+
+ private void alert(){
+ Alert alert = new Alert(Alert.AlertType.WARNING);
+ alert.initModality(Modality.APPLICATION_MODAL);
+ alert.setContentText("请输入将要加密的字符!");
+ alert.setHeaderText(null);
+ alert.show();
+ }
+}
diff --git a/src/main/java/com/zhangmeng/tools/utils/EncryptUtils.java b/src/main/java/com/zhangmeng/tools/utils/EncryptUtils.java
new file mode 100644
index 0000000..e0a5153
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/utils/EncryptUtils.java
@@ -0,0 +1,24 @@
+package com.zhangmeng.tools.utils;
+
+import cn.hutool.crypto.digest.DigestUtil;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
+public class EncryptUtils {
+
+ public static String md5(String text){
+ return DigestUtil.md5Hex(text);
+ }
+ public static String md5_16(String text){
+ return DigestUtil.md5Hex16(text);
+ }
+ public static String spring_security(String text){
+ return new BCryptPasswordEncoder().encode(text);
+ }
+
+ public static void main(String[] args) {
+ String text = "123456";
+
+ System.out.println(md5(text));
+ System.out.println(md5_16(text));
+ }
+}
diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java
new file mode 100644
index 0000000..83b93af
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java
@@ -0,0 +1,43 @@
+package com.zhangmeng.tools.utils;
+
+import java.net.URL;
+
+public class ResourcesUtils {
+
+ public static final String base_fxml = "/fxml/";
+
+ public static URL getResource(String name){
+ String path = base_fxml + name + ".fxml";
+ return ResourcesUtils.class.getResource(path);
+ }
+
+ public enum Menu{
+ Md5("md5加密",0),
+ SpringSecurity("spring加密",1);
+
+ Menu(String title, int index) {
+ this.title = title;
+ this.index = index;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ private String title;
+ private int index;
+
+ }
+}
diff --git a/src/main/java/com/zhangmeng/tools/views/HomeView.java b/src/main/java/com/zhangmeng/tools/views/HomeView.java
new file mode 100644
index 0000000..c0eeea8
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/views/HomeView.java
@@ -0,0 +1,20 @@
+package com.zhangmeng.tools.views;
+
+import com.zhangmeng.tools.utils.ResourcesUtils;
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.AnchorPane;
+import javafx.stage.Stage;
+
+public class HomeView extends Application {
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ AnchorPane fx = FXMLLoader.load(ResourcesUtils.getResource("home"));
+ Scene scene = new Scene(fx);
+ primaryStage.setScene(scene);
+ primaryStage.setTitle("java-fx 工具");
+ primaryStage.show();
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..f44574a
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,135 @@
+server:
+ port: 8083
+# max-http-header-size: 1000MB
+spring:
+ main:
+ allow-bean-definition-overriding: true
+ autoconfigure:
+ exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
+ session:
+ timeout: 120m
+ datasource:
+ druid:
+ stat-view-servlet:
+ loginUsername:
+ loginPassword:
+ dynamic:
+ druid:
+ initial-size: 5
+ min-idle: 5
+ maxActive: 20
+ maxWait: 60000
+ timeBetweenEvictionRunsMillis: 60000
+ minEvictableIdleTimeMillis: 300000
+ validationQuery: SELECT 1
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ poolPreparedStatements: true
+ maxPoolPreparedStatementPerConnectionSize: 20
+ filters: stat,wall,slf4j
+ connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+ primary: master #??????????????,?????master
+ strict: false #??????,??false???. ????????????????????,???????????.
+ datasource:
+ # ? ? ? ?
+ master:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ url: jdbc:mysql://127.0.0.1:3306/mystyle-blog?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ username: root
+ password: root
+ jpa:
+ database: mysql
+ hibernate:
+ ddl-auto: update
+ naming:
+ physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
+ show-sql: true
+ properties:
+ hibernate:
+ dialect: org.hibernate.dialect.MySQL5Dialect
+ quartz:
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: DefaultQuartzScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+ tablePrefix: QRTZ_
+ isClustered: false
+ clusterCheckinInterval: 10000
+ useProperties: false
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10
+ threadPriority: 5
+ threadsInheritContextClassLoaderOfInitializingThread: true
+ job-store-type: jdbc
+ jdbc:
+ initialize-schema: never
+ freemarker:
+ suffix: .ftl
+ check-template-location: true
+ content-type: text/html
+ charset: UTF-8
+ template-loader-path: classpath:/templates/
+ cache: false
+ enabled: true
+ request-context-attribute: request
+ mail:
+ default-encoding: UTF-8
+ port: 465
+ username: zhang1334717033@foxmail.com
+ password: gymxczptynubfgih
+ test-connection: false
+ host: smtp.qq.com
+ protocol: smtps
+ properties:
+ mail:
+ smtp:
+ auth: true
+ starttls:
+ enable: true
+ required: true
+ rabbitmq:
+ host: localhost
+ port: 5672
+ username: guest
+ password: guest
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ servlet:
+ multipart:
+ max-file-size: 1000MB
+ max-request-size: 1000MB
+pagehelper:
+ row-bounds-with-count: true
+ offset-as-page-num: true
+ page-size-zero: true
+ reasonable: false
+ support-methods-arguments: false
+ params: count=countSql
+ helper-dialect: mysql
+mybatis:
+ type-aliases-package: com.zhangmeng.modules
+ configuration:
+ mapUnderscoreToCamelCase: true
+ default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
+mapper:
+ style: normal
+ enum-as-simple-type: true
+ identity: MYSQL
+ check-example-entity-class: true
+logging:
+ config: classpath:logback-spring.xml
+log:
+ level:
+ root: info
+ my: info
+ file-path: logs/admin-server.log
+ max-size: 30MB
diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml
new file mode 100644
index 0000000..9408112
--- /dev/null
+++ b/src/main/resources/fxml/home.fxml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/fxml/md5.fxml b/src/main/resources/fxml/md5.fxml
new file mode 100644
index 0000000..bb82839
--- /dev/null
+++ b/src/main/resources/fxml/md5.fxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/fxml/spring-security.fxml b/src/main/resources/fxml/spring-security.fxml
new file mode 100644
index 0000000..8b6cb0b
--- /dev/null
+++ b/src/main/resources/fxml/spring-security.fxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..3a86bdc
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ UTF-8
+
+
+
+
+ ${logFile}
+
+ %d [%thread] %-5level -[%file:%line]- %msg%n
+
+ UTF-8
+
+
+ ${logFile}.%d{yyyy-MM-dd}.%i
+ ${maxFileSize}
+
+
+
+
+ ${logFile}.error
+
+ %d [%thread] %-5level %logger{36} -[%file:%line]- %msg%n
+
+ UTF-8
+
+
+ ${logFile}.error.%d{yyyy-MM-dd}.%i
+ ${maxFileSize}
+
+
+ error
+ ACCEPT
+ DENY
+
+
+
+
+ ${logFile}.sql
+
+ %d [%thread] %msg%n
+
+ UTF-8
+
+
+ ${logFile}.sql.%d{yyyy-MM-dd}.%i
+ ${maxFileSize}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/test/java/com/zhangmeng/tools/JavaFxToolsApplicationTests.java b/src/test/java/com/zhangmeng/tools/JavaFxToolsApplicationTests.java
new file mode 100644
index 0000000..2ee03c0
--- /dev/null
+++ b/src/test/java/com/zhangmeng/tools/JavaFxToolsApplicationTests.java
@@ -0,0 +1,13 @@
+package com.zhangmeng.tools;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class JavaFxToolsApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}