Compare commits
No commits in common. "main" and "master" have entirely different histories.
|
@ -1,46 +1,38 @@
|
||||||
######################################################################
|
|
||||||
# Build Tools
|
|
||||||
|
|
||||||
.gradle
|
|
||||||
/build/
|
|
||||||
!gradle/wrapper/gradle-wrapper.jar
|
|
||||||
|
|
||||||
target/
|
target/
|
||||||
!.mvn/wrapper/maven-wrapper.jar
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
######################################################################
|
### IntelliJ IDEA ###
|
||||||
# IDE
|
.idea/modules.xml
|
||||||
|
.idea/jarRepositories.xml
|
||||||
|
.idea/compiler.xml
|
||||||
|
.idea/libraries/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
### STS ###
|
### Eclipse ###
|
||||||
.apt_generated
|
.apt_generated
|
||||||
.classpath
|
.classpath
|
||||||
.factorypath
|
.factorypath
|
||||||
.project
|
.project
|
||||||
.settings
|
.settings
|
||||||
.springBeans
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
### IntelliJ IDEA ###
|
|
||||||
.idea
|
|
||||||
*.iws
|
|
||||||
*.iml
|
|
||||||
*.ipr
|
|
||||||
|
|
||||||
### JRebel ###
|
|
||||||
rebel.xml
|
|
||||||
### NetBeans ###
|
### NetBeans ###
|
||||||
nbproject/private/
|
/nbproject/private/
|
||||||
build/*
|
/nbbuild/
|
||||||
nbbuild/
|
/dist/
|
||||||
dist/
|
/nbdist/
|
||||||
nbdist/
|
/.nb-gradle/
|
||||||
.nb-gradle/
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
######################################################################
|
### VS Code ###
|
||||||
# Others
|
.vscode/
|
||||||
*.log
|
|
||||||
*.xml.versionsBackup
|
|
||||||
*.swp
|
|
||||||
|
|
||||||
!*/build/*.java
|
### Mac OS ###
|
||||||
!*/build/*.html
|
.DS_Store
|
||||||
!*/build/*.xml
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-auth/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-auth/src/main/resources" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-common/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-common/src/main/resources" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-gateway/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-gateway/src/main/resources" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-moudels/bwie-goods/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-moudels/bwie-goods/src/main/resources" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-moudels/bwie-system/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-moudels/bwie-system/src/main/resources" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-moudels/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/bwie-moudels/src/main/resources" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="MavenProjectsManager">
|
||||||
|
<option name="originalFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Palette2">
|
||||||
|
<group name="Swing">
|
||||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Button" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="RadioButton" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="CheckBox" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Label" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||||
|
<preferred-size width="-1" height="20" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
</group>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
21
LICENSE
21
LICENSE
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020 若依
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
26
README.md
26
README.md
|
@ -1,26 +0,0 @@
|
||||||
## 系统模块
|
|
||||||
|
|
||||||
~~~
|
|
||||||
com.muyu
|
|
||||||
├── muyu-ui // 前端框架 [80]
|
|
||||||
├── muyu-gateway // 网关模块 [8080]
|
|
||||||
├── muyu-auth // 认证中心 [9200]
|
|
||||||
├── muyu-common // 通用模块
|
|
||||||
│ └── muyu-common-core // 核心模块
|
|
||||||
│ └── muyu-common-datascope // 权限范围
|
|
||||||
│ └── muyu-common-datasource // 多数据源
|
|
||||||
│ └── muyu-common-log // 日志记录
|
|
||||||
│ └── muyu-common-redis // 缓存服务
|
|
||||||
│ └── muyu-common-seata // 分布式事务
|
|
||||||
│ └── muyu-common-security // 安全模块
|
|
||||||
│ └── muyu-common-swagger // 系统接口
|
|
||||||
│ └── muyu-common-system // 系统基础
|
|
||||||
├── muyu-modules // 业务模块
|
|
||||||
│ └── muyu-system // 系统模块 [9201]
|
|
||||||
│ └── muyu-gen // 代码生成 [9202]
|
|
||||||
│ └── muyu-job // 定时任务 [9203]
|
|
||||||
│ └── muyu-file // 文件服务 [9300]
|
|
||||||
├── muyu-visual // 图形化管理模块
|
|
||||||
│ └── muyu-visual-monitor // 监控中心 [9100]
|
|
||||||
├──pom.xml // 公共依赖
|
|
||||||
~~~
|
|
|
@ -1,12 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [信息] 清理工程target生成路径。
|
|
||||||
echo.
|
|
||||||
|
|
||||||
%~d0
|
|
||||||
cd %~dp0
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
call mvn clean
|
|
||||||
|
|
||||||
pause
|
|
|
@ -1,12 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [信息] 打包Web工程,生成war/jar包文件。
|
|
||||||
echo.
|
|
||||||
|
|
||||||
%~d0
|
|
||||||
cd %~dp0
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
call mvn clean package -Dmaven.test.skip=true
|
|
||||||
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Auth<74><68><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-auth/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-auth.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Gateway<61><79><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-gateway/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-gateway.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-File<6C><65><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-modules/muyu-file/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-file.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-Gen<65><6E><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-modules/muyu-gen/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-gen.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-Job<6F><62><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-modules/muyu-job/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-job.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Modules-System<65><6D><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-modules/muyu-system/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-system.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -1,14 +0,0 @@
|
||||||
@echo off
|
|
||||||
echo.
|
|
||||||
echo [<5B><>Ϣ] ʹ<><CAB9>Jar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Monitor<6F><72><EFBFBD>̡<EFBFBD>
|
|
||||||
echo.
|
|
||||||
|
|
||||||
cd %~dp0
|
|
||||||
cd ../muyu-visual/muyu-monitor/target
|
|
||||||
|
|
||||||
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
|
||||||
|
|
||||||
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-visual-monitor.jar
|
|
||||||
|
|
||||||
cd bin
|
|
||||||
pause
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>g63d18</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>bwie-auth</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<!-- 项目公共 依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>bwie-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringBoot Web-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.bwei.auth;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@EnableFeignClients
|
||||||
|
public class AuthApp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(AuthApp.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.bwei.auth.controller;
|
||||||
|
|
||||||
|
import com.bwei.auth.service.AuthService;
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import com.bwie.common.domain.request.JwtRequest;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@Log4j2
|
||||||
|
public class AuthController {
|
||||||
|
@Autowired
|
||||||
|
public AuthService service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证码
|
||||||
|
* @param tel
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("send/tocode/{tel}")
|
||||||
|
public Result tocode(@PathVariable String tel){
|
||||||
|
return service.tocode(tel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录
|
||||||
|
* @param jwtRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("login")
|
||||||
|
public Result login(@RequestBody JwtRequest jwtRequest){
|
||||||
|
return service.login(jwtRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("user/info")
|
||||||
|
public Result<Admin> info(){
|
||||||
|
Admin admin = service.info();
|
||||||
|
return Result.success(admin);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.bwei.auth.feign;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
|
||||||
|
import java.awt.image.RescaleOp;
|
||||||
|
|
||||||
|
@FeignClient("bwie-system")
|
||||||
|
public interface SystemFeignService {
|
||||||
|
|
||||||
|
@PostMapping("toLoginSel/{tel}")
|
||||||
|
public Result<Admin> toLoginSel(@PathVariable String tel);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.bwei.auth.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import com.bwie.common.domain.request.JwtRequest;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
|
||||||
|
public interface AuthService {
|
||||||
|
Result tocode(String tel);
|
||||||
|
|
||||||
|
Result login(JwtRequest jwtRequest);
|
||||||
|
|
||||||
|
Admin info();
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package com.bwei.auth.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.RandomUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.bwei.auth.feign.SystemFeignService;
|
||||||
|
import com.bwei.auth.service.AuthService;
|
||||||
|
|
||||||
|
import com.bwie.common.constants.JwtConstants;
|
||||||
|
import com.bwie.common.constants.TokenConstants;
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import com.bwie.common.domain.request.JwtRequest;
|
||||||
|
import com.bwie.common.domain.response.JwtResponse;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import com.bwie.common.utils.JwtUtils;
|
||||||
|
import com.bwie.common.utils.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class AuthServiceImpl implements AuthService {
|
||||||
|
@Autowired
|
||||||
|
private HttpServletRequest request;
|
||||||
|
@Autowired
|
||||||
|
private RedisTemplate<String,String> redisTemplate;
|
||||||
|
@Autowired
|
||||||
|
private SystemFeignService feignService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result tocode(String tel) {
|
||||||
|
//判断号码
|
||||||
|
Result<Admin> loginSel = feignService.toLoginSel(tel);
|
||||||
|
Admin admin = loginSel.getData();
|
||||||
|
if (admin == null) {
|
||||||
|
return Result.error("号码未注册");
|
||||||
|
}
|
||||||
|
//创建验证码
|
||||||
|
String code = RandomUtil.randomNumbers(6);
|
||||||
|
redisTemplate.opsForValue().set(tel,code);
|
||||||
|
//反响
|
||||||
|
JwtRequest jwtRequest = new JwtRequest();
|
||||||
|
jwtRequest.setTel(tel);
|
||||||
|
jwtRequest.setCode(code);
|
||||||
|
return Result.success(jwtRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result login(JwtRequest jwtRequest) {
|
||||||
|
//判断非空
|
||||||
|
if (StringUtils.isAllBlank(jwtRequest.getTel(),jwtRequest.getCode())){
|
||||||
|
return Result.error("号码或验证码不能为空");
|
||||||
|
}
|
||||||
|
//判断号码
|
||||||
|
Result<Admin> loginSel = feignService.toLoginSel(jwtRequest.getTel());
|
||||||
|
Admin admin = loginSel.getData();
|
||||||
|
if (admin == null) {
|
||||||
|
return Result.error("");
|
||||||
|
}
|
||||||
|
//判断验证码
|
||||||
|
String code = redisTemplate.opsForValue().get(jwtRequest.getTel());
|
||||||
|
if (!jwtRequest.getCode().equals(code)){
|
||||||
|
return Result.error("验证码错误");
|
||||||
|
}
|
||||||
|
//令牌
|
||||||
|
String userKey = UUID.randomUUID().toString().replaceAll("-", "");
|
||||||
|
Map<String,Object> claims = new HashMap<>();
|
||||||
|
claims.put(JwtConstants.USER_KEY,userKey);
|
||||||
|
String token = JwtUtils.createToken(claims);
|
||||||
|
//存入redis
|
||||||
|
redisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY+userKey, JSONObject.toJSONString(admin));
|
||||||
|
//反响
|
||||||
|
JwtResponse jwtResponse = new JwtResponse();
|
||||||
|
jwtResponse.setToken(token);
|
||||||
|
jwtResponse.setEndTime("30MIN");
|
||||||
|
return Result.success(jwtResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Admin info() {
|
||||||
|
//token
|
||||||
|
String token = request.getHeader(TokenConstants.TOKEN);
|
||||||
|
//userKey
|
||||||
|
String userKey = JwtUtils.getUserKey(token);
|
||||||
|
//redis
|
||||||
|
String s = redisTemplate.opsForValue().get(TokenConstants.LOGIN_TOKEN_KEY + userKey);
|
||||||
|
//反序列化
|
||||||
|
return JSONObject.parseObject(s,Admin.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,16 @@
|
||||||
# Tomcat
|
# Tomcat
|
||||||
server:
|
server:
|
||||||
port: 9200
|
port: 8089
|
||||||
|
|
||||||
# Spring
|
# Spring
|
||||||
spring:
|
spring:
|
||||||
|
main:
|
||||||
|
allow-circular-references: true
|
||||||
|
jackson:
|
||||||
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
|
time-zone: GMT+8
|
||||||
application:
|
application:
|
||||||
# 应用名称
|
# 应用名称
|
||||||
name: muyu-auth
|
name: bwie-auth
|
||||||
profiles:
|
profiles:
|
||||||
# 环境配置
|
# 环境配置
|
||||||
active: dev
|
active: dev
|
|
@ -0,0 +1,184 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>g63d18</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>bwie-common</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<!-- bootstrap 启动器 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringCloud Alibaba Nacos -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringCloud Alibaba Nacos Config -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringCloud Alibaba Sentinel -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- 负载均衡-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringCloud Openfeign -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- JWT -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
<version>0.9.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Alibaba Fastjson -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>fastjson</artifactId>
|
||||||
|
<version>1.2.80</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringBoot Boot Redis -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- Hibernate Validator -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-validation</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- Apache Lang3 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- lombok依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- hutool -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
<version>5.8.3</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- 阿里大鱼 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun</groupId>
|
||||||
|
<artifactId>dysmsapi20170525</artifactId>
|
||||||
|
<version>2.0.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- oss 图片上传 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun.oss</groupId>
|
||||||
|
<artifactId>aliyun-sdk-oss</artifactId>
|
||||||
|
<version>3.12.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- <!–mq 依赖–>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||||
|
</dependency>-->
|
||||||
|
|
||||||
|
<!--fastDfs文件上传-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.tobato</groupId>
|
||||||
|
<artifactId>fastdfs-client</artifactId>
|
||||||
|
<version>1.26.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--=====================================999999999999999999===================================================-->
|
||||||
|
<!--短信依赖 5条依赖-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>fastjson</artifactId>
|
||||||
|
<version>1.2.15</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpclient</artifactId>
|
||||||
|
<version>4.2.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpcore</artifactId>
|
||||||
|
<version>4.2.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-lang</groupId>
|
||||||
|
<artifactId>commons-lang</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
|
<artifactId>jetty-util</artifactId>
|
||||||
|
<version>9.3.7.v20160115</version>
|
||||||
|
</dependency>
|
||||||
|
<!--=========================================================================================================-->
|
||||||
|
|
||||||
|
<!--邮箱依赖-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-mail</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Java Servlet -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.swagger</groupId>
|
||||||
|
<artifactId>swagger-annotations</artifactId>
|
||||||
|
<version>1.6.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-annotation</artifactId>
|
||||||
|
<version>3.5.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.bwie.common.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||||
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||||
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class RedisConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
|
||||||
|
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||||||
|
template.setConnectionFactory(factory);
|
||||||
|
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
|
||||||
|
Jackson2JsonRedisSerializer(Object.class);
|
||||||
|
ObjectMapper om = new ObjectMapper();
|
||||||
|
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
||||||
|
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
|
||||||
|
jackson2JsonRedisSerializer.setObjectMapper(om);
|
||||||
|
|
||||||
|
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
|
||||||
|
// key采用String的序列化方式
|
||||||
|
template.setKeySerializer(stringRedisSerializer);
|
||||||
|
// hash的key也采用String的序列化方式
|
||||||
|
template.setHashKeySerializer(stringRedisSerializer);
|
||||||
|
// value序列化方式采用jackson
|
||||||
|
template.setValueSerializer(jackson2JsonRedisSerializer);
|
||||||
|
// hash的value序列化方式采用jackson
|
||||||
|
template.setHashValueSerializer(jackson2JsonRedisSerializer);
|
||||||
|
template.afterPropertiesSet();
|
||||||
|
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.bwie.common.constants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 系统常量
|
||||||
|
* @author DongZl
|
||||||
|
*/
|
||||||
|
public class Constants {
|
||||||
|
/**
|
||||||
|
* 成功标记
|
||||||
|
*/
|
||||||
|
public static final Integer SUCCESS = 200;
|
||||||
|
public static final String SUCCESS_MSG = "操作成功";
|
||||||
|
/**
|
||||||
|
* 失败标记
|
||||||
|
*/
|
||||||
|
public static final Integer ERROR = 500;
|
||||||
|
public static final String ERROR_MSG = "操作异常";
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.bwie.common.constants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: Jwt常量
|
||||||
|
*/
|
||||||
|
public class JwtConstants {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户ID字段
|
||||||
|
*/
|
||||||
|
public static final String DETAILS_USER_ID = "user_id";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户名字段
|
||||||
|
*/
|
||||||
|
public static final String DETAILS_USERNAME = "username";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户标识
|
||||||
|
*/
|
||||||
|
public static final String USER_KEY = "user_key";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 令牌秘钥
|
||||||
|
*/
|
||||||
|
public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.bwie.common.constants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 令牌常量
|
||||||
|
*/
|
||||||
|
public class TokenConstants {
|
||||||
|
/**
|
||||||
|
* 缓存有效期,默认720(分钟)
|
||||||
|
*/
|
||||||
|
public final static long EXPIRATION = 720;
|
||||||
|
/**
|
||||||
|
* 缓存刷新时间,默认120(分钟)
|
||||||
|
*/
|
||||||
|
public final static long REFRESH_TIME = 120;
|
||||||
|
/**
|
||||||
|
* 权限缓存前缀
|
||||||
|
*/
|
||||||
|
public final static String LOGIN_TOKEN_KEY = "login_tokens:";
|
||||||
|
/**
|
||||||
|
* token标识
|
||||||
|
*/
|
||||||
|
public static final String TOKEN = "token";
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.bwie.common.domain;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Admin {
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 号码
|
||||||
|
*/
|
||||||
|
private String tel;
|
||||||
|
/**
|
||||||
|
* 用户名
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 密码
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
/**
|
||||||
|
* 信誉金
|
||||||
|
*/
|
||||||
|
private BigDecimal adminLimit;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.bwie.common.domain;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.req.CeaNameEditReq;
|
||||||
|
import com.bwie.common.domain.req.CesNameQueryReq;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class Cesname {
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 名称
|
||||||
|
*/
|
||||||
|
public String name;
|
||||||
|
/**
|
||||||
|
* 数字
|
||||||
|
*/
|
||||||
|
public Integer age;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
* @param cesNameQueryReq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Cesname queryBuild(CesNameQueryReq cesNameQueryReq){
|
||||||
|
return Cesname.builder()
|
||||||
|
.id(cesNameQueryReq.getId())
|
||||||
|
.name(cesNameQueryReq.getName())
|
||||||
|
.age(cesNameQueryReq.getAge())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加
|
||||||
|
* @param id
|
||||||
|
* @param ceaNameEditReq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Cesname editBuild(Long id, CeaNameEditReq ceaNameEditReq){
|
||||||
|
return Cesname.builder()
|
||||||
|
.name(ceaNameEditReq.getName())
|
||||||
|
.age(ceaNameEditReq.getAge())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
package com.bwie.common.domain;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.req.DistrictEditReq;
|
||||||
|
import com.bwie.common.domain.req.DistrictQueryReq;
|
||||||
|
import com.bwie.common.web.TreeEntity;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class District extends TreeEntity {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编码
|
||||||
|
*/
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 级别
|
||||||
|
*/
|
||||||
|
private String level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 级别编码
|
||||||
|
*/
|
||||||
|
private String codeLecel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 区域编码
|
||||||
|
*/
|
||||||
|
private String areaCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中心经纬度
|
||||||
|
*/
|
||||||
|
private String center;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
* @param districtQueryReq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static District queryBuild(DistrictQueryReq districtQueryReq){
|
||||||
|
return District.builder()
|
||||||
|
.parentId(districtQueryReq.getParentId())
|
||||||
|
.name(districtQueryReq.getName())
|
||||||
|
.code(districtQueryReq.getCode())
|
||||||
|
.level(districtQueryReq.getLevel())
|
||||||
|
.areaCode(districtQueryReq.getAreaCode())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加
|
||||||
|
* @param id
|
||||||
|
* @param districtEditReq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static District editBuild(Long id, DistrictEditReq districtEditReq){
|
||||||
|
return District.builder()
|
||||||
|
.parentId(districtEditReq.getParentId())
|
||||||
|
.name(districtEditReq.getName())
|
||||||
|
.code(districtEditReq.getCode())
|
||||||
|
.level(districtEditReq.getLevel())
|
||||||
|
.codeLecel(districtEditReq.getCodeLevel())
|
||||||
|
.areaCode(districtEditReq.getAreaCode())
|
||||||
|
.center(districtEditReq.getCenter())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.bwie.common.domain.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CeaNameEditReq {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(name = "", value = "")
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 名称
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(name = "", value = "")
|
||||||
|
public String name;
|
||||||
|
/**
|
||||||
|
* 数字
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(name = "", value = "")
|
||||||
|
public Integer age;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.bwie.common.domain.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CesNameQueryReq {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(name = "", value = "")
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 名称
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(name = "", value = "")
|
||||||
|
public String name;
|
||||||
|
/**
|
||||||
|
* 数字
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(name = "", value = "")
|
||||||
|
public Integer age;
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.bwie.common.domain.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class DistrictEditReq{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 父级 */
|
||||||
|
@ApiModelProperty(name = "父级", value = "父级")
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/** 名称 */
|
||||||
|
@ApiModelProperty(name = "名称", value = "名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/** 编码 */
|
||||||
|
@ApiModelProperty(name = "编码", value = "编码")
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/** 级别 */
|
||||||
|
@ApiModelProperty(name = "级别", value = "级别")
|
||||||
|
private String level;
|
||||||
|
|
||||||
|
/** 级别编码 */
|
||||||
|
@ApiModelProperty(name = "级别编码", value = "级别编码")
|
||||||
|
private String codeLevel;
|
||||||
|
|
||||||
|
/** 区域编码 */
|
||||||
|
@ApiModelProperty(name = "区域编码", value = "区域编码")
|
||||||
|
private String areaCode;
|
||||||
|
|
||||||
|
/** 中心经纬度 */
|
||||||
|
@ApiModelProperty(name = "中心经纬度", value = "中心经纬度")
|
||||||
|
private String center;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.bwie.common.domain.req;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class DistrictQueryReq{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 父级 */
|
||||||
|
@ApiModelProperty(name = "父级", value = "父级")
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/** 名称 */
|
||||||
|
@ApiModelProperty(name = "名称", value = "名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/** 编码 */
|
||||||
|
@ApiModelProperty(name = "编码", value = "编码")
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/** 级别 */
|
||||||
|
@ApiModelProperty(name = "级别", value = "级别")
|
||||||
|
private String level;
|
||||||
|
|
||||||
|
/** 区域编码 */
|
||||||
|
@ApiModelProperty(name = "区域编码", value = "区域编码")
|
||||||
|
private String areaCode;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.bwie.common.domain.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class JwtRequest {
|
||||||
|
/**
|
||||||
|
* 号码
|
||||||
|
*/
|
||||||
|
private String tel;
|
||||||
|
/**
|
||||||
|
* 验证码
|
||||||
|
*/
|
||||||
|
private String code;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.bwie.common.domain.response;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class JwtResponse {
|
||||||
|
/**
|
||||||
|
* 令牌
|
||||||
|
*/
|
||||||
|
private String token;
|
||||||
|
/**
|
||||||
|
* 结束时间
|
||||||
|
*/
|
||||||
|
private String endTime;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.bwie.common.result;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 列表返回结果集
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PageResult<T> implements Serializable {
|
||||||
|
/**
|
||||||
|
* 总条数
|
||||||
|
*/
|
||||||
|
private long total;
|
||||||
|
/**
|
||||||
|
* 结果集合
|
||||||
|
*/
|
||||||
|
private List<T> list;
|
||||||
|
public PageResult() {
|
||||||
|
}
|
||||||
|
public PageResult(long total, List<T> list) {
|
||||||
|
this.total = total;
|
||||||
|
this.list = list;
|
||||||
|
}
|
||||||
|
public static <T> PageResult<T> toPageResult(long total, List<T> list){
|
||||||
|
return new PageResult(total , list);
|
||||||
|
}
|
||||||
|
public static <T> Result<PageResult<T>> toResult(long total, List<T> list){
|
||||||
|
return Result.success(PageResult.toPageResult(total,list));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
package com.bwie.common.result;
|
||||||
|
|
||||||
|
import com.bwie.common.constants.Constants;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 响应信息主体
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Result<T> implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
/**
|
||||||
|
* 成功
|
||||||
|
*/
|
||||||
|
public static final int SUCCESS = Constants.SUCCESS;
|
||||||
|
/**
|
||||||
|
* 失败
|
||||||
|
*/
|
||||||
|
public static final int FAIL = Constants.ERROR;
|
||||||
|
/**
|
||||||
|
* 返回状态码
|
||||||
|
*/
|
||||||
|
private int code;
|
||||||
|
/**
|
||||||
|
* 响应信息
|
||||||
|
*/
|
||||||
|
private String msg;
|
||||||
|
/**
|
||||||
|
* 响应数据
|
||||||
|
*/
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
public static <T> Result<T> success() {
|
||||||
|
return restResult(null, SUCCESS, Constants.SUCCESS_MSG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> success(T data) {
|
||||||
|
return restResult(data, SUCCESS, Constants.SUCCESS_MSG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> success(T data, String msg) {
|
||||||
|
return restResult(data, SUCCESS, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> error() {
|
||||||
|
return restResult(null, FAIL, Constants.ERROR_MSG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> error(String msg) {
|
||||||
|
return restResult(null, FAIL, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> error(T data) {
|
||||||
|
return restResult(data, FAIL, Constants.ERROR_MSG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> error(T data, String msg) {
|
||||||
|
return restResult(data, FAIL, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result<T> error(int code, String msg) {
|
||||||
|
return restResult(null, code, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> Result<T> restResult(T data, int code, String msg) {
|
||||||
|
Result<T> apiResult = new Result<>();
|
||||||
|
apiResult.setCode(code);
|
||||||
|
apiResult.setData(data);
|
||||||
|
apiResult.setMsg(msg);
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
|
||||||
|
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @BelongsProject: 0107day02
|
||||||
|
* @BelongsPackage: com.bw.config
|
||||||
|
* @Author: zhupengfei
|
||||||
|
* @CreateTime: 2023-02-01 08:52
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class FastUtil {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(FastUtil.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FastFileStorageClient storageClient ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
*/
|
||||||
|
public String upload(MultipartFile multipartFile) throws Exception{
|
||||||
|
String originalFilename = multipartFile.getOriginalFilename().
|
||||||
|
substring(multipartFile.getOriginalFilename().
|
||||||
|
lastIndexOf(".") + 1);
|
||||||
|
StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
|
||||||
|
multipartFile.getInputStream(),
|
||||||
|
multipartFile.getSize(),originalFilename , null);
|
||||||
|
return storePath.getFullPath();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 删除文件
|
||||||
|
*/
|
||||||
|
public String deleteFile(String fileUrl) {
|
||||||
|
if (StringUtils.isEmpty(fileUrl)) {
|
||||||
|
log.info("fileUrl == >>文件路径为空...");
|
||||||
|
return "文件路径不能为空";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
StorePath storePath = StorePath.parseFromUrl(fileUrl);
|
||||||
|
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
return "删除成功";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 生成验证码工具类
|
||||||
|
* @Date 2023-5-11 上午 10:09
|
||||||
|
*/
|
||||||
|
public class GenCodeUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数字类型
|
||||||
|
*/
|
||||||
|
private static final String NUMBER_STR = "0123456789";
|
||||||
|
/**
|
||||||
|
* 字母类型
|
||||||
|
*/
|
||||||
|
private static final String LETTERS_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短信验证码长度
|
||||||
|
*/
|
||||||
|
private static final Integer SMS_CODE_LENGTH = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成短信四位验证码
|
||||||
|
* @return 验证码
|
||||||
|
*/
|
||||||
|
public static String genLetterStrSms(){
|
||||||
|
return genCode(LETTERS_STR, SMS_CODE_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成短信四位验证码
|
||||||
|
* @return 验证码
|
||||||
|
*/
|
||||||
|
public static String genNumberCodeSms(){
|
||||||
|
return genCode(NUMBER_STR, SMS_CODE_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成验证码
|
||||||
|
* @param codeLength 验证码长度
|
||||||
|
* @return 验证码
|
||||||
|
*/
|
||||||
|
public static String genLetterStr(int codeLength){
|
||||||
|
return genCode(LETTERS_STR, codeLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成验证码
|
||||||
|
* @param codeLength 验证码长度
|
||||||
|
* @return 验证码
|
||||||
|
*/
|
||||||
|
public static String genNumberCode( int codeLength){
|
||||||
|
return genCode(NUMBER_STR, codeLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成验证码
|
||||||
|
* @param str 验证码字符串
|
||||||
|
* @param codeLength 验证码长度
|
||||||
|
* @return 验证码
|
||||||
|
*/
|
||||||
|
public static String genCode (String str, int codeLength){
|
||||||
|
//将字符串转换为一个新的字符数组。
|
||||||
|
char[] verificationCodeArray = str.toCharArray();
|
||||||
|
Random random = new Random();
|
||||||
|
//计数器
|
||||||
|
int count = 0;
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
do {
|
||||||
|
//随机生成一个随机数
|
||||||
|
int index = random.nextInt(verificationCodeArray.length);
|
||||||
|
char c = verificationCodeArray[index];
|
||||||
|
//限制四位不重复数字
|
||||||
|
if (stringBuilder.indexOf(String.valueOf(c)) == -1) {
|
||||||
|
stringBuilder.append(c);
|
||||||
|
//计数器加1
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
//当count等于4时结束,随机生成四位数的验证码
|
||||||
|
} while (count != codeLength);
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
|
||||||
|
public class HttpPost {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//你的本地地址 配你的项目地址 这个是我电脑本地的地址
|
||||||
|
String doGet = doGet("http://127.0.0.1:8081/sell/list");
|
||||||
|
System.out.println("----------SSSS---DDS--S--"+doGet);
|
||||||
|
}
|
||||||
|
public static String doGet(String httpUrl){
|
||||||
|
//链接
|
||||||
|
HttpURLConnection connection=null;
|
||||||
|
|
||||||
|
InputStream is=null;
|
||||||
|
BufferedReader br = null;
|
||||||
|
StringBuffer result=new StringBuffer();
|
||||||
|
try {
|
||||||
|
//创建连接
|
||||||
|
URL url=new URL(httpUrl);
|
||||||
|
connection= (HttpURLConnection) url.openConnection();
|
||||||
|
//设置请求方式
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
//设置连接超时时间
|
||||||
|
connection.setConnectTimeout(15000);
|
||||||
|
//设置读取超时时间
|
||||||
|
connection.setReadTimeout(15000);
|
||||||
|
|
||||||
|
//开始连接
|
||||||
|
connection.connect();
|
||||||
|
//获取响应数据
|
||||||
|
if(connection.getResponseCode()==200){
|
||||||
|
//获取返回的数据
|
||||||
|
is=connection.getInputStream();
|
||||||
|
if(is!=null){
|
||||||
|
br=new BufferedReader(new InputStreamReader(is,"UTF-8"));
|
||||||
|
String temp = null;
|
||||||
|
while ((temp=br.readLine())!=null){
|
||||||
|
result.append(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}finally {
|
||||||
|
if(br!=null){
|
||||||
|
try {
|
||||||
|
br.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(is!=null){
|
||||||
|
try {
|
||||||
|
is.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
connection.disconnect();// 关闭远程连接
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,310 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.NameValuePair;
|
||||||
|
import org.apache.http.client.HttpClient;
|
||||||
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||||
|
import org.apache.http.client.methods.HttpDelete;
|
||||||
|
import org.apache.http.client.methods.HttpGet;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.client.methods.HttpPut;
|
||||||
|
import org.apache.http.conn.ClientConnectionManager;
|
||||||
|
import org.apache.http.conn.scheme.Scheme;
|
||||||
|
import org.apache.http.conn.scheme.SchemeRegistry;
|
||||||
|
import org.apache.http.conn.ssl.SSLSocketFactory;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.DefaultHttpClient;
|
||||||
|
import org.apache.http.message.BasicNameValuePair;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import javax.net.ssl.TrustManager;
|
||||||
|
import javax.net.ssl.X509TrustManager;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.security.KeyManagementException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class HttpUtils {
|
||||||
|
/**
|
||||||
|
* get
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doGet(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpGet request = new HttpGet(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* post form
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param bodys
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPost(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
Map<String, String> bodys)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPost request = new HttpPost(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bodys != null) {
|
||||||
|
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
|
||||||
|
|
||||||
|
for (String key : bodys.keySet()) {
|
||||||
|
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
|
||||||
|
}
|
||||||
|
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
|
||||||
|
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
|
||||||
|
request.setEntity(formEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post String
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPost(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
String body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPost request = new HttpPost(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(body)) {
|
||||||
|
request.setEntity(new StringEntity(body, "utf-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post stream
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPost(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
byte[] body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPost request = new HttpPost(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body != null) {
|
||||||
|
request.setEntity(new ByteArrayEntity(body));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put String
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPut(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
String body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPut request = new HttpPut(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isNotBlank(body)) {
|
||||||
|
request.setEntity(new StringEntity(body, "utf-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put stream
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @param body
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doPut(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys,
|
||||||
|
byte[] body)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpPut request = new HttpPut(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body != null) {
|
||||||
|
request.setEntity(new ByteArrayEntity(body));
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @param path
|
||||||
|
* @param method
|
||||||
|
* @param headers
|
||||||
|
* @param querys
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HttpResponse doDelete(String host, String path, String method,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, String> querys)
|
||||||
|
throws Exception {
|
||||||
|
HttpClient httpClient = wrapClient(host);
|
||||||
|
|
||||||
|
HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
request.addHeader(e.getKey(), e.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
|
||||||
|
StringBuilder sbUrl = new StringBuilder();
|
||||||
|
sbUrl.append(host);
|
||||||
|
if (!StringUtils.isBlank(path)) {
|
||||||
|
sbUrl.append(path);
|
||||||
|
}
|
||||||
|
if (null != querys) {
|
||||||
|
StringBuilder sbQuery = new StringBuilder();
|
||||||
|
for (Map.Entry<String, String> query : querys.entrySet()) {
|
||||||
|
if (0 < sbQuery.length()) {
|
||||||
|
sbQuery.append("&");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
|
||||||
|
sbQuery.append(query.getValue());
|
||||||
|
}
|
||||||
|
if (!StringUtils.isBlank(query.getKey())) {
|
||||||
|
sbQuery.append(query.getKey());
|
||||||
|
if (!StringUtils.isBlank(query.getValue())) {
|
||||||
|
sbQuery.append("=");
|
||||||
|
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (0 < sbQuery.length()) {
|
||||||
|
sbUrl.append("?").append(sbQuery);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sbUrl.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpClient wrapClient(String host) {
|
||||||
|
HttpClient httpClient = new DefaultHttpClient();
|
||||||
|
if (host.startsWith("https://")) {
|
||||||
|
sslClient(httpClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void sslClient(HttpClient httpClient) {
|
||||||
|
try {
|
||||||
|
SSLContext ctx = SSLContext.getInstance("TLS");
|
||||||
|
X509TrustManager tm = new X509TrustManager() {
|
||||||
|
public X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public void checkClientTrusted(X509Certificate[] xcs, String str) {
|
||||||
|
|
||||||
|
}
|
||||||
|
public void checkServerTrusted(X509Certificate[] xcs, String str) {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ctx.init(null, new TrustManager[] { tm }, null);
|
||||||
|
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
|
||||||
|
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||||
|
ClientConnectionManager ccm = httpClient.getConnectionManager();
|
||||||
|
SchemeRegistry registry = ccm.getSchemeRegistry();
|
||||||
|
registry.register(new Scheme("https", 443, ssf));
|
||||||
|
} catch (KeyManagementException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
} catch (NoSuchAlgorithmException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,42 +1,35 @@
|
||||||
package com.muyu.common.core.utils.ip;
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
import com.muyu.common.core.utils.ServletUtils;
|
|
||||||
import com.muyu.common.core.utils.StringUtils;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import cn.hutool.http.server.HttpServerRequest;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import sun.net.httpserver.HttpServerImpl;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取IP方法
|
* 获取IP方法
|
||||||
*
|
*
|
||||||
* @author muyu
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
public class IpUtils {
|
public class IpUtils {
|
||||||
|
|
||||||
|
|
||||||
public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";
|
public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";
|
||||||
// 匹配 ip
|
// 匹配 ip
|
||||||
public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")";
|
public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")";
|
||||||
|
public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))";
|
||||||
// 匹配网段
|
// 匹配网段
|
||||||
public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")";
|
public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")";
|
||||||
public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取客户端IP
|
|
||||||
*
|
|
||||||
* @return IP地址
|
|
||||||
*/
|
|
||||||
public static String getIpAddr () {
|
|
||||||
return getIpAddr(ServletUtils.getRequest());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取客户端IP
|
* 获取客户端IP
|
||||||
*
|
*
|
||||||
* @param request 请求对象
|
* @param request 请求对象
|
||||||
*
|
|
||||||
* @return IP地址
|
* @return IP地址
|
||||||
*/
|
*/
|
||||||
public static String getIpAddr (HttpServletRequest request) {
|
public static String getIpAddr(HttpServletRequest request) {
|
||||||
if (request == null) {
|
if (request == null) {
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
@ -65,10 +58,9 @@ public class IpUtils {
|
||||||
* 检查是否为内部IP地址
|
* 检查是否为内部IP地址
|
||||||
*
|
*
|
||||||
* @param ip IP地址
|
* @param ip IP地址
|
||||||
*
|
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public static boolean internalIp (String ip) {
|
public static boolean internalIp(String ip) {
|
||||||
byte[] addr = textToNumericFormatV4(ip);
|
byte[] addr = textToNumericFormatV4(ip);
|
||||||
return internalIp(addr) || "127.0.0.1".equals(ip);
|
return internalIp(addr) || "127.0.0.1".equals(ip);
|
||||||
}
|
}
|
||||||
|
@ -77,10 +69,9 @@ public class IpUtils {
|
||||||
* 检查是否为内部IP地址
|
* 检查是否为内部IP地址
|
||||||
*
|
*
|
||||||
* @param addr byte地址
|
* @param addr byte地址
|
||||||
*
|
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
private static boolean internalIp (byte[] addr) {
|
private static boolean internalIp(byte[] addr) {
|
||||||
if (StringUtils.isNull(addr) || addr.length < 2) {
|
if (StringUtils.isNull(addr) || addr.length < 2) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -116,10 +107,9 @@ public class IpUtils {
|
||||||
* 将IPv4地址转换成字节
|
* 将IPv4地址转换成字节
|
||||||
*
|
*
|
||||||
* @param text IPv4地址
|
* @param text IPv4地址
|
||||||
*
|
|
||||||
* @return byte 字节
|
* @return byte 字节
|
||||||
*/
|
*/
|
||||||
public static byte[] textToNumericFormatV4 (String text) {
|
public static byte[] textToNumericFormatV4(String text) {
|
||||||
if (text.length() == 0) {
|
if (text.length() == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +145,7 @@ public class IpUtils {
|
||||||
bytes[3] = (byte) (int) (l & 0xFF);
|
bytes[3] = (byte) (int) (l & 0xFF);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
for (i = 0; i < 2 ; ++i) {
|
for (i = 0; i < 2; ++i) {
|
||||||
l = Integer.parseInt(elements[i]);
|
l = Integer.parseInt(elements[i]);
|
||||||
if ((l < 0L) || (l > 255L)) {
|
if ((l < 0L) || (l > 255L)) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -170,7 +160,7 @@ public class IpUtils {
|
||||||
bytes[3] = (byte) (int) (l & 0xFF);
|
bytes[3] = (byte) (int) (l & 0xFF);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
for (i = 0; i < 4 ; ++i) {
|
for (i = 0; i < 4; ++i) {
|
||||||
l = Integer.parseInt(elements[i]);
|
l = Integer.parseInt(elements[i]);
|
||||||
if ((l < 0L) || (l > 255L)) {
|
if ((l < 0L) || (l > 255L)) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -192,7 +182,7 @@ public class IpUtils {
|
||||||
*
|
*
|
||||||
* @return 本地IP地址
|
* @return 本地IP地址
|
||||||
*/
|
*/
|
||||||
public static String getHostIp () {
|
public static String getHostIp() {
|
||||||
try {
|
try {
|
||||||
return InetAddress.getLocalHost().getHostAddress();
|
return InetAddress.getLocalHost().getHostAddress();
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
|
@ -205,7 +195,7 @@ public class IpUtils {
|
||||||
*
|
*
|
||||||
* @return 本地主机名
|
* @return 本地主机名
|
||||||
*/
|
*/
|
||||||
public static String getHostName () {
|
public static String getHostName() {
|
||||||
try {
|
try {
|
||||||
return InetAddress.getLocalHost().getHostName();
|
return InetAddress.getLocalHost().getHostName();
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
|
@ -217,10 +207,9 @@ public class IpUtils {
|
||||||
* 从多级反向代理中获得第一个非unknown IP地址
|
* 从多级反向代理中获得第一个非unknown IP地址
|
||||||
*
|
*
|
||||||
* @param ip 获得的IP地址
|
* @param ip 获得的IP地址
|
||||||
*
|
|
||||||
* @return 第一个非unknown IP地址
|
* @return 第一个非unknown IP地址
|
||||||
*/
|
*/
|
||||||
public static String getMultistageReverseProxyIp (String ip) {
|
public static String getMultistageReverseProxyIp(String ip) {
|
||||||
// 多级反向代理检测
|
// 多级反向代理检测
|
||||||
if (ip != null && ip.indexOf(",") > 0) {
|
if (ip != null && ip.indexOf(",") > 0) {
|
||||||
final String[] ips = ip.trim().split(",");
|
final String[] ips = ip.trim().split(",");
|
||||||
|
@ -238,35 +227,34 @@ public class IpUtils {
|
||||||
* 检测给定字符串是否为未知,多用于检测HTTP请求相关
|
* 检测给定字符串是否为未知,多用于检测HTTP请求相关
|
||||||
*
|
*
|
||||||
* @param checkString 被检测的字符串
|
* @param checkString 被检测的字符串
|
||||||
*
|
|
||||||
* @return 是否未知
|
* @return 是否未知
|
||||||
*/
|
*/
|
||||||
public static boolean isUnknown (String checkString) {
|
public static boolean isUnknown(String checkString) {
|
||||||
return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString);
|
return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否为IP
|
* 是否为IP
|
||||||
*/
|
*/
|
||||||
public static boolean isIP (String ip) {
|
public static boolean isIP(String ip) {
|
||||||
return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP);
|
return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否为IP,或 *为间隔的通配符地址
|
* 是否为IP,或 *为间隔的通配符地址
|
||||||
*/
|
*/
|
||||||
public static boolean isIpWildCard (String ip) {
|
public static boolean isIpWildCard(String ip) {
|
||||||
return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD);
|
return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检测参数是否在ip通配符里
|
* 检测参数是否在ip通配符里
|
||||||
*/
|
*/
|
||||||
public static boolean ipIsInWildCardNoCheck (String ipWildCard, String ip) {
|
public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip) {
|
||||||
String[] s1 = ipWildCard.split("\\.");
|
String[] s1 = ipWildCard.split("\\.");
|
||||||
String[] s2 = ip.split("\\.");
|
String[] s2 = ip.split("\\.");
|
||||||
boolean isMatchedSeg = true;
|
boolean isMatchedSeg = true;
|
||||||
for (int i = 0 ; i < s1.length && !s1[i].equals("*") ; i++) {
|
for (int i = 0; i < s1.length && !s1[i].equals("*"); i++) {
|
||||||
if (!s1[i].equals(s2[i])) {
|
if (!s1[i].equals(s2[i])) {
|
||||||
isMatchedSeg = false;
|
isMatchedSeg = false;
|
||||||
break;
|
break;
|
||||||
|
@ -278,20 +266,20 @@ public class IpUtils {
|
||||||
/**
|
/**
|
||||||
* 是否为特定格式如:“10.10.10.1-10.10.10.99”的ip段字符串
|
* 是否为特定格式如:“10.10.10.1-10.10.10.99”的ip段字符串
|
||||||
*/
|
*/
|
||||||
public static boolean isIPSegment (String ipSeg) {
|
public static boolean isIPSegment(String ipSeg) {
|
||||||
return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG);
|
return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断ip是否在指定网段中
|
* 判断ip是否在指定网段中
|
||||||
*/
|
*/
|
||||||
public static boolean ipIsInNetNoCheck (String iparea, String ip) {
|
public static boolean ipIsInNetNoCheck(String iparea, String ip) {
|
||||||
int idx = iparea.indexOf('-');
|
int idx = iparea.indexOf('-');
|
||||||
String[] sips = iparea.substring(0, idx).split("\\.");
|
String[] sips = iparea.substring(0, idx).split("\\.");
|
||||||
String[] sipe = iparea.substring(idx + 1).split("\\.");
|
String[] sipe = iparea.substring(idx + 1).split("\\.");
|
||||||
String[] sipt = ip.split("\\.");
|
String[] sipt = ip.split("\\.");
|
||||||
long ips = 0L, ipe = 0L, ipt = 0L;
|
long ips = 0L, ipe = 0L, ipt = 0L;
|
||||||
for (int i = 0 ; i < 4 ; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
ips = ips << 8 | Integer.parseInt(sips[i]);
|
ips = ips << 8 | Integer.parseInt(sips[i]);
|
||||||
ipe = ipe << 8 | Integer.parseInt(sipe[i]);
|
ipe = ipe << 8 | Integer.parseInt(sipe[i]);
|
||||||
ipt = ipt << 8 | Integer.parseInt(sipt[i]);
|
ipt = ipt << 8 | Integer.parseInt(sipt[i]);
|
||||||
|
@ -309,10 +297,9 @@ public class IpUtils {
|
||||||
*
|
*
|
||||||
* @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99`
|
* @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99`
|
||||||
* @param ip 校验IP地址
|
* @param ip 校验IP地址
|
||||||
*
|
|
||||||
* @return boolean 结果
|
* @return boolean 结果
|
||||||
*/
|
*/
|
||||||
public static boolean isMatchedIp (String filter, String ip) {
|
public static boolean isMatchedIp(String filter, String ip) {
|
||||||
if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) {
|
if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
|
@ -1,8 +1,6 @@
|
||||||
package com.muyu.common.core.utils;
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
import com.muyu.common.core.constant.SecurityConstants;
|
import com.bwie.common.constants.JwtConstants;
|
||||||
import com.muyu.common.core.constant.TokenConstants;
|
|
||||||
import com.muyu.common.core.text.Convert;
|
|
||||||
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Claims;
|
||||||
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.Jwts;
|
||||||
import io.jsonwebtoken.SignatureAlgorithm;
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
|
@ -10,21 +8,23 @@ import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jwt工具类
|
* @description: Jwt工具类
|
||||||
*
|
* @author DongZl
|
||||||
* @author muyu
|
|
||||||
*/
|
*/
|
||||||
public class JwtUtils {
|
public class JwtUtils {
|
||||||
public static String secret = TokenConstants.SECRET;
|
|
||||||
|
/**
|
||||||
|
* 秘钥
|
||||||
|
*/
|
||||||
|
public static String secret = JwtConstants.SECRET;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从数据声明生成令牌
|
* 从数据声明生成令牌
|
||||||
*
|
*
|
||||||
* @param claims 数据声明
|
* @param claims 数据声明
|
||||||
*
|
|
||||||
* @return 令牌
|
* @return 令牌
|
||||||
*/
|
*/
|
||||||
public static String createToken (Map<String, Object> claims) {
|
public static String createToken(Map<String, Object> claims){
|
||||||
String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
|
String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
@ -33,91 +33,77 @@ public class JwtUtils {
|
||||||
* 从令牌中获取数据声明
|
* 从令牌中获取数据声明
|
||||||
*
|
*
|
||||||
* @param token 令牌
|
* @param token 令牌
|
||||||
*
|
|
||||||
* @return 数据声明
|
* @return 数据声明
|
||||||
*/
|
*/
|
||||||
public static Claims parseToken (String token) {
|
public static Claims parseToken(String token){
|
||||||
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
|
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据令牌获取用户标识
|
* 根据令牌获取用户标识
|
||||||
*
|
*
|
||||||
* @param token 令牌
|
* @param token 令牌
|
||||||
*
|
|
||||||
* @return 用户ID
|
* @return 用户ID
|
||||||
*/
|
*/
|
||||||
public static String getUserKey (String token) {
|
public static String getUserKey(String token){
|
||||||
Claims claims = parseToken(token);
|
Claims claims = parseToken(token);
|
||||||
return getValue(claims, SecurityConstants.USER_KEY);
|
return getValue(claims, JwtConstants.USER_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据令牌获取用户标识
|
* 根据令牌获取用户标识
|
||||||
*
|
*
|
||||||
* @param claims 身份信息
|
* @param claims 身份信息
|
||||||
*
|
|
||||||
* @return 用户ID
|
* @return 用户ID
|
||||||
*/
|
*/
|
||||||
public static String getUserKey (Claims claims) {
|
public static String getUserKey(Claims claims){
|
||||||
return getValue(claims, SecurityConstants.USER_KEY);
|
return getValue(claims, JwtConstants.USER_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据令牌获取用户ID
|
* 根据令牌获取用户ID
|
||||||
*
|
*
|
||||||
* @param token 令牌
|
* @param token 令牌
|
||||||
*
|
|
||||||
* @return 用户ID
|
* @return 用户ID
|
||||||
*/
|
*/
|
||||||
public static String getUserId (String token) {
|
public static String getUserId(String token){
|
||||||
Claims claims = parseToken(token);
|
Claims claims = parseToken(token);
|
||||||
return getValue(claims, SecurityConstants.DETAILS_USER_ID);
|
return getValue(claims, JwtConstants.DETAILS_USER_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据身份信息获取用户ID
|
* 根据身份信息获取用户ID
|
||||||
*
|
*
|
||||||
* @param claims 身份信息
|
* @param claims 身份信息
|
||||||
*
|
|
||||||
* @return 用户ID
|
* @return 用户ID
|
||||||
*/
|
*/
|
||||||
public static String getUserId (Claims claims) {
|
public static String getUserId(Claims claims){
|
||||||
return getValue(claims, SecurityConstants.DETAILS_USER_ID);
|
return getValue(claims, JwtConstants.DETAILS_USER_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据令牌获取用户名
|
* 根据令牌获取用户名
|
||||||
*
|
*
|
||||||
* @param token 令牌
|
* @param token 令牌
|
||||||
*
|
|
||||||
* @return 用户名
|
* @return 用户名
|
||||||
*/
|
*/
|
||||||
public static String getUserName (String token) {
|
public static String getUserName(String token){
|
||||||
Claims claims = parseToken(token);
|
Claims claims = parseToken(token);
|
||||||
return getValue(claims, SecurityConstants.DETAILS_USERNAME);
|
return getValue(claims, JwtConstants.DETAILS_USERNAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据身份信息获取用户名
|
* 根据身份信息获取用户名
|
||||||
*
|
*
|
||||||
* @param claims 身份信息
|
* @param claims 身份信息
|
||||||
*
|
|
||||||
* @return 用户名
|
* @return 用户名
|
||||||
*/
|
*/
|
||||||
public static String getUserName (Claims claims) {
|
public static String getUserName(Claims claims){
|
||||||
return getValue(claims, SecurityConstants.DETAILS_USERNAME);
|
return getValue(claims, JwtConstants.DETAILS_USERNAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据身份信息获取键值
|
* 根据身份信息获取键值
|
||||||
*
|
*
|
||||||
* @param claims 身份信息
|
* @param claims 身份信息
|
||||||
* @param key 键
|
* @param key 键
|
||||||
*
|
|
||||||
* @return 值
|
* @return 值
|
||||||
*/
|
*/
|
||||||
public static String getValue (Claims claims, String key) {
|
public static String getValue(Claims claims, String key){
|
||||||
return Convert.toStr(claims.get(key), "");
|
Object obj = claims.get(key);
|
||||||
|
return obj == null ? "" : obj.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.util.EntityUtils;
|
||||||
|
import org.springframework.cache.annotation.CachePut;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName MsgUtil.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年05月26日 15:49:00
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class MsgUtil {
|
||||||
|
|
||||||
|
|
||||||
|
public void sendMsg(String phone,String code){
|
||||||
|
String host = "https://gyytz.market.alicloudapi.com";
|
||||||
|
String path = "/sms/smsSend";
|
||||||
|
String method = "POST";
|
||||||
|
String appcode = "5cceb96013f14b829268818f1ca6e781";
|
||||||
|
Map<String, String> headers = new HashMap<String, String>();
|
||||||
|
//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
|
||||||
|
headers.put("Authorization", "APPCODE " + appcode);
|
||||||
|
Map<String, String> querys = new HashMap<String, String>();
|
||||||
|
querys.put("mobile", phone);
|
||||||
|
querys.put("param", "**code**:"+code+",**minute**:5");
|
||||||
|
|
||||||
|
//smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html
|
||||||
|
|
||||||
|
querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2");
|
||||||
|
querys.put("templateId", "908e94ccf08b4476ba6c876d13f084ad");
|
||||||
|
Map<String, String> bodys = new HashMap<String, String>();
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
/**
|
||||||
|
* 重要提示如下:
|
||||||
|
* HttpUtils请从\r\n\t \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t \t* 下载
|
||||||
|
*
|
||||||
|
* 相应的依赖请参照
|
||||||
|
* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
|
||||||
|
*/
|
||||||
|
HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
|
||||||
|
System.out.println(response.toString());
|
||||||
|
//获取response的body
|
||||||
|
System.out.println(EntityUtils.toString(response.getEntity()));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,153 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import com.aliyun.oss.OSS;
|
||||||
|
import com.aliyun.oss.OSSClientBuilder;
|
||||||
|
import com.aliyun.oss.model.GetObjectRequest;
|
||||||
|
import com.aliyun.oss.model.PutObjectRequest;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Oss服务调用
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
public class OssUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述
|
||||||
|
*/
|
||||||
|
private static String endPoint = "oss-cn-shanghai.aliyuncs.com";
|
||||||
|
private static String accessKeyId = "LTAI5tD2tppzLQ4Rb6yKYyph";
|
||||||
|
private static String accessKeySecret = "KEKNKwVvDq7PZLjE63NPBouqHXox4Q";
|
||||||
|
private static String accessPre = "https://dzlmuyu.oss-cn-shanghai.aliyuncs.com/";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bucket名称
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String bucketName = "dzlmuyu";
|
||||||
|
|
||||||
|
private static OSS ossClient ;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ossClient = new OSSClientBuilder().build(
|
||||||
|
endPoint,
|
||||||
|
accessKeyId,
|
||||||
|
accessKeySecret);
|
||||||
|
log.info("oss服务连接成功!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认路径上传本地文件
|
||||||
|
* @param filePath
|
||||||
|
*/
|
||||||
|
public static String uploadFile(String filePath){
|
||||||
|
return uploadFileForBucket(bucketName,getOssFilePath(filePath) ,filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认路径上传multipartFile文件
|
||||||
|
* @param multipartFile
|
||||||
|
*/
|
||||||
|
public static String uploadMultipartFile(MultipartFile multipartFile) {
|
||||||
|
return uploadMultipartFile(bucketName,getOssFilePath(multipartFile.getOriginalFilename()),multipartFile);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 上传 multipartFile 类型文件
|
||||||
|
* @param bucketName
|
||||||
|
* @param ossPath
|
||||||
|
* @param multipartFile
|
||||||
|
*/
|
||||||
|
public static String uploadMultipartFile(String bucketName , String ossPath , MultipartFile multipartFile){
|
||||||
|
InputStream inputStream = null;
|
||||||
|
try {
|
||||||
|
inputStream = multipartFile.getInputStream();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
uploadFileInputStreamForBucket(bucketName, ossPath, inputStream);
|
||||||
|
return accessPre+ossPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用File上传PutObject上传文件 ** 程序默认使用次方法上传
|
||||||
|
* @param bucketName 实例名称
|
||||||
|
* @param ossPath oss存储路径
|
||||||
|
* @param filePath 本地文件路径
|
||||||
|
*/
|
||||||
|
public static String uploadFileForBucket(String bucketName , String ossPath , String filePath) {
|
||||||
|
// 创建PutObjectRequest对象。
|
||||||
|
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossPath, new File(filePath));
|
||||||
|
|
||||||
|
// 上传
|
||||||
|
ossClient.putObject(putObjectRequest);
|
||||||
|
return accessPre+ossPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用文件流上传到指定的bucket实例
|
||||||
|
* @param bucketName 实例名称
|
||||||
|
* @param ossPath oss存储路径
|
||||||
|
* @param filePath 本地文件路径
|
||||||
|
*/
|
||||||
|
public static String uploadFileInputStreamForBucket(String bucketName , String ossPath , String filePath){
|
||||||
|
|
||||||
|
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
|
||||||
|
InputStream inputStream = null;
|
||||||
|
try {
|
||||||
|
inputStream = new FileInputStream(filePath);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
|
||||||
|
uploadFileInputStreamForBucket(bucketName, ossPath, inputStream);
|
||||||
|
return accessPre+ossPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void uploadFileInputStreamForBucket(String bucketName , String ossPath , InputStream inputStream ){
|
||||||
|
ossClient.putObject(bucketName, ossPath, inputStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载
|
||||||
|
* @param ossFilePath
|
||||||
|
* @param filePath
|
||||||
|
*/
|
||||||
|
public static void downloadFile(String ossFilePath , String filePath ){
|
||||||
|
downloadFileForBucket(bucketName , ossFilePath , filePath);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 下载
|
||||||
|
* @param bucketName 实例名称
|
||||||
|
* @param ossFilePath oss存储路径
|
||||||
|
* @param filePath 本地文件路径
|
||||||
|
*/
|
||||||
|
public static void downloadFileForBucket(String bucketName , String ossFilePath , String filePath ){
|
||||||
|
ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getOssDefaultPath(){
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
String url =
|
||||||
|
now.getYear()+"/"+
|
||||||
|
now.getMonth()+"/"+
|
||||||
|
now.getDayOfMonth()+"/"+
|
||||||
|
now.getHour()+"/"+
|
||||||
|
now.getMinute()+"/";
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getOssFilePath(String filePath){
|
||||||
|
String fileSuf = filePath.substring(filePath.indexOf(".") + 1);
|
||||||
|
return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
//
|
||||||
|
// Source code recreated from a .class file by IntelliJ IDEA
|
||||||
|
// (powered by Fernflower decompiler)
|
||||||
|
//
|
||||||
|
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
|
||||||
|
import com.aliyun.tea.NameInMap;
|
||||||
|
import com.aliyun.tea.TeaModel;
|
||||||
|
import com.aliyun.tea.Validation;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class SendSmsResponse extends TeaModel {
|
||||||
|
@NameInMap("headers")
|
||||||
|
@Validation(
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
public Map<String, String> headers;
|
||||||
|
@NameInMap("body")
|
||||||
|
@Validation(
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
public SendSmsResponseBody body;
|
||||||
|
|
||||||
|
public SendSmsResponse() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SendSmsResponse build(Map<String, ?> map) throws Exception {
|
||||||
|
SendSmsResponse self = new SendSmsResponse();
|
||||||
|
return (SendSmsResponse)TeaModel.build(map, self);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SendSmsResponse setHeaders(Map<String, String> headers) {
|
||||||
|
this.headers = headers;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getHeaders() {
|
||||||
|
return this.headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SendSmsResponse setBody(SendSmsResponseBody body) {
|
||||||
|
this.body = body;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SendSmsResponseBody getBody() {
|
||||||
|
return this.body;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 冯凯
|
||||||
|
* @version 1.0
|
||||||
|
* @description: TODO
|
||||||
|
* @date 2023/8/8 16:27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SmsResponse {
|
||||||
|
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
private String smsid;
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
private String balance;
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import org.springframework.util.AntPathMatcher;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 字符串处理工具类
|
||||||
|
*/
|
||||||
|
public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 判断一个对象是否为空
|
||||||
|
*
|
||||||
|
* @param object Object
|
||||||
|
* @return true:为空 false:非空
|
||||||
|
*/
|
||||||
|
public static boolean isNull(Object object) {
|
||||||
|
return object == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 判断一个Collection是否为空, 包含List,Set,Queue
|
||||||
|
*
|
||||||
|
* @param coll 要判断的Collection
|
||||||
|
* @return true:为空 false:非空
|
||||||
|
*/
|
||||||
|
public static boolean isEmpty(Collection<?> coll) {
|
||||||
|
return isNull(coll) || coll.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找指定字符串是否匹配指定字符串列表中的任意一个字符串
|
||||||
|
*
|
||||||
|
* @param str 指定字符串
|
||||||
|
* @param strs 需要检查的字符串数组
|
||||||
|
* @return 是否匹配
|
||||||
|
*/
|
||||||
|
public static boolean matches(String str, List<String> strs) {
|
||||||
|
if (isEmpty(str) || isEmpty(strs)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (String pattern : strs) {
|
||||||
|
if (isMatch(pattern, str))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断url是否与规则配置:
|
||||||
|
* ? 表示单个字符;
|
||||||
|
* * 表示一层路径内的任意字符串,不可跨层级;
|
||||||
|
* ** 表示任意层路径;
|
||||||
|
*
|
||||||
|
* @param pattern 匹配规则
|
||||||
|
* @param url 需要匹配的url
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isMatch(String pattern, String url) {
|
||||||
|
AntPathMatcher matcher = new AntPathMatcher();
|
||||||
|
return matcher.match(pattern, url);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
package com.bwie.common.utils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.aliyun.dysmsapi20170525.Client;
|
||||||
|
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
|
||||||
|
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
|
||||||
|
import com.aliyun.teaopenapi.models.Config;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短信工具类
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
public class TelSmsUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限
|
||||||
|
*/
|
||||||
|
private static String accessKeyId = "LTAIEVXszCmcd1T5";
|
||||||
|
private static String accessKeySecret = "2zHwciQXln8wExSEnkIYtRTSwLeRNd";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短信访问域名
|
||||||
|
*/
|
||||||
|
private static String endpoint = "dysmsapi.aliyuncs.com";
|
||||||
|
/**
|
||||||
|
* 短信签名
|
||||||
|
*/
|
||||||
|
private static String signName = "登录验证";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实例化短信对象
|
||||||
|
*/
|
||||||
|
private static Client client;
|
||||||
|
|
||||||
|
static {
|
||||||
|
log.info("初始化短信服务开始");
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
try {
|
||||||
|
client = initClient();
|
||||||
|
log.info("初始化短信成功:{}",signName);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
log.info("初始化短信服务结束:耗时:{}MS",(System.currentTimeMillis()-startTime));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 初始化短信对象
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private static Client initClient() throws Exception{
|
||||||
|
Config config = new Config()
|
||||||
|
// 您的AccessKey ID
|
||||||
|
.setAccessKeyId(accessKeyId)
|
||||||
|
// 您的AccessKey Secret
|
||||||
|
.setAccessKeySecret(accessKeySecret);
|
||||||
|
// 访问的域名
|
||||||
|
config.endpoint = endpoint;
|
||||||
|
return new Client(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送单条短信
|
||||||
|
* @param tel
|
||||||
|
* @param templateCode SMS_153991546
|
||||||
|
* @param sendDataMap
|
||||||
|
*/
|
||||||
|
public static String sendSms(String tel , String templateCode , Map<String,String> sendDataMap){
|
||||||
|
SendSmsRequest sendSmsRequest = new SendSmsRequest()
|
||||||
|
.setPhoneNumbers(tel)
|
||||||
|
.setSignName(signName)
|
||||||
|
.setTemplateCode(templateCode)
|
||||||
|
.setTemplateParam(JSONObject.toJSONString(sendDataMap));
|
||||||
|
SendSmsResponse sendSmsResponse = null;
|
||||||
|
try {
|
||||||
|
log.info("发送短信验证码:消息内容是:【{}】", JSONObject.toJSONString(sendDataMap));
|
||||||
|
sendSmsResponse = client.sendSms(sendSmsRequest);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("短信发送异常,手机号:【{}】,短信内容:【{}】,异常信息:【{}】", tel, sendDataMap, e);
|
||||||
|
}
|
||||||
|
return JSONObject.toJSONString(sendSmsResponse.getBody());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.bwie.common.web;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tree基类
|
||||||
|
*
|
||||||
|
* @author muyu
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TreeEntity {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 父菜单名称
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String parentName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 父菜单ID
|
||||||
|
*/
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示顺序
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Integer orderNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 祖级列表
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String ancestors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 子部门
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private List<?> children = new ArrayList<>();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>g63d18</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>bwie-gateway</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<!-- 公共模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>bwie-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- 网关依赖 -->
|
||||||
|
<!-- SpringCloud Gateway -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-gateway</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- SpringCloud Alibaba Sentinel Gateway -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- 引入阿里巴巴sentinel限流 依赖-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.csp</groupId>
|
||||||
|
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.bwie.gateway;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class GatewayApp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(GatewayApp.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,8 @@
|
||||||
package com.muyu.gateway.config.properties;
|
package com.bwie.gateway.config;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
@ -8,24 +11,22 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 放行白名单配置
|
* @description: 放行白名单配置
|
||||||
*
|
* @author DongZl
|
||||||
* @author muyu
|
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@RefreshScope
|
@RefreshScope
|
||||||
@ConfigurationProperties(prefix = "security.ignore")
|
@ConfigurationProperties(prefix = "ignore")
|
||||||
public class IgnoreWhiteProperties {
|
@Data
|
||||||
|
@Log4j2
|
||||||
|
public class IgnoreWhiteConfig {
|
||||||
/**
|
/**
|
||||||
* 放行白名单配置,网关不校验此处的白名单
|
* 放行白名单配置,网关不校验此处的白名单
|
||||||
*/
|
*/
|
||||||
private List<String> whites = new ArrayList<>();
|
private List<String> whites = new ArrayList<>();
|
||||||
|
|
||||||
public List<String> getWhites () {
|
public void setWhites(List<String> whites) {
|
||||||
return whites;
|
log.info("加载网关路径白名单:{}", JSONObject.toJSONString(whites));
|
||||||
}
|
|
||||||
|
|
||||||
public void setWhites (List<String> whites) {
|
|
||||||
this.whites = whites;
|
this.whites = whites;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
package com.bwie.gateway.filters;
|
||||||
|
|
||||||
|
import com.bwie.common.constants.TokenConstants;
|
||||||
|
import com.bwie.common.utils.JwtUtils;
|
||||||
|
import com.bwie.common.utils.StringUtils;
|
||||||
|
import com.bwie.gateway.GatewayApp;
|
||||||
|
import com.bwie.gateway.config.IgnoreWhiteConfig;
|
||||||
|
import com.bwie.gateway.utils.GatewayUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.origin.Origin;
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||||
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
|
import org.springframework.core.Ordered;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class AuthFiter implements GlobalFilter, Ordered {
|
||||||
|
@Autowired
|
||||||
|
private IgnoreWhiteConfig ignoreWhiteConfig;
|
||||||
|
@Autowired
|
||||||
|
private RedisTemplate<String,String> redisTemplate;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
|
//获取白名单
|
||||||
|
List<String> whites = ignoreWhiteConfig.getWhites();
|
||||||
|
//获取请求的URI
|
||||||
|
ServerHttpRequest request = exchange.getRequest();
|
||||||
|
String path = request.getURI().getPath();
|
||||||
|
if (StringUtils.matches(path,whites)){
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
//token非空
|
||||||
|
String token = request.getHeaders().getFirst(TokenConstants.TOKEN);
|
||||||
|
if (StringUtils.isEmpty(token)){
|
||||||
|
return GatewayUtils.errorResponse(exchange,"token不能为空",HttpStatus.UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
//token合法性 为假抛出异常
|
||||||
|
try {
|
||||||
|
JwtUtils.parseToken(token);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return GatewayUtils.errorResponse(exchange,"token不合法!",HttpStatus.UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
//token有效
|
||||||
|
//获取admin
|
||||||
|
String userKey = JwtUtils.getUserKey(token);
|
||||||
|
Boolean aBoolean = redisTemplate.hasKey(TokenConstants.LOGIN_TOKEN_KEY + userKey);
|
||||||
|
if (userKey==null |!aBoolean){
|
||||||
|
return GatewayUtils.errorResponse(exchange,"过期",HttpStatus.UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
//expire
|
||||||
|
//放行
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int getOrder() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
package com.bwie.gateway.utils;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import com.bwie.common.utils.StringUtils;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 网关处理工具类
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
public class GatewayUtils {
|
||||||
|
/**
|
||||||
|
* 添加请求头参数
|
||||||
|
* @param mutate 修改对象
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
*/
|
||||||
|
public static void addHeader(ServerHttpRequest.Builder mutate, String key, Object value) {
|
||||||
|
if (StringUtils.isEmpty(key)){
|
||||||
|
log.warn("添加请求头参数键不可以为空");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (value == null) {
|
||||||
|
log.warn("添加请求头参数:[{}]值为空",key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String valueStr = value.toString();
|
||||||
|
mutate.header(key, valueStr);
|
||||||
|
log.info("添加请求头参数成功 - 键:[{}] , 值:[{}]", key , value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除请求头参数
|
||||||
|
* @param mutate 修改对象
|
||||||
|
* @param key 键
|
||||||
|
*/
|
||||||
|
public static void removeHeader(ServerHttpRequest.Builder mutate, String key) {
|
||||||
|
if (StringUtils.isEmpty(key)){
|
||||||
|
log.warn("删除请求头参数键不可以为空");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mutate.headers(httpHeaders -> httpHeaders.remove(key)).build();
|
||||||
|
log.info("删除请求头参数 - 键:[{}]",key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误结果响应
|
||||||
|
* @param exchange 响应上下文
|
||||||
|
* @param msg 响应消息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Mono<Void> errorResponse(ServerWebExchange exchange, String msg, HttpStatus httpStatus) {
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
//设置HTTP响应头状态
|
||||||
|
response.setStatusCode(httpStatus);
|
||||||
|
//设置HTTP响应头文本格式
|
||||||
|
response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json");
|
||||||
|
//定义响应内容
|
||||||
|
Result<?> result = Result.error(msg);
|
||||||
|
String resultJson = JSONObject.toJSONString(result);
|
||||||
|
log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson);
|
||||||
|
DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes());
|
||||||
|
//进行响应
|
||||||
|
return response.writeWith(Mono.just(dataBuffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误结果响应
|
||||||
|
* @param exchange 响应上下文
|
||||||
|
* @param msg 响应消息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Mono<Void> errorResponse(ServerWebExchange exchange, String msg) {
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
//设置HTTP响应头状态
|
||||||
|
response.setStatusCode(HttpStatus.OK);
|
||||||
|
//设置HTTP响应头文本格式
|
||||||
|
response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json");
|
||||||
|
//定义响应内容
|
||||||
|
Result<?> result = Result.error(msg);
|
||||||
|
String resultJson = JSONObject.toJSONString(result);
|
||||||
|
log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson);
|
||||||
|
DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes());
|
||||||
|
//进行响应
|
||||||
|
return response.writeWith(Mono.just(dataBuffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,15 +1,19 @@
|
||||||
# Tomcat
|
# Tomcat
|
||||||
server:
|
server:
|
||||||
port: 9202
|
port: 18080
|
||||||
|
|
||||||
# Spring
|
# Spring
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
# 应用名称
|
# 应用名称
|
||||||
name: muyu-gen
|
name: bwie-gateway
|
||||||
profiles:
|
profiles:
|
||||||
# 环境配置
|
# 环境配置
|
||||||
active: dev
|
active: dev
|
||||||
|
main:
|
||||||
|
# 允许使用循环引用
|
||||||
|
allow-circular-references: true
|
||||||
|
# 允许定义相同的bean对象 去覆盖原有的
|
||||||
|
allow-bean-definition-overriding: true
|
||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
discovery:
|
discovery:
|
|
@ -0,0 +1,107 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>g63d18</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>bwie-goods</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<!--==============================================公共============================================================-->
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- 系统公共 依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>bwie-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SpringBoot Web-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Druid -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>druid-spring-boot-starter</artifactId>
|
||||||
|
<version>1.2.8</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mysql Connector -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mybatis 依赖配置 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
|
<version>2.2.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Pagehelper -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.pagehelper</groupId>
|
||||||
|
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||||
|
<version>1.4.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--图片上传-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.tobato</groupId>
|
||||||
|
<artifactId>fastdfs-client</artifactId>
|
||||||
|
<version>1.26.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- knife4j -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.xiaoymin</groupId>
|
||||||
|
<artifactId>knife4j-spring-boot-starter</artifactId>
|
||||||
|
<version>2.0.9</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- rabbitMQ -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 消息转换器 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||||
|
<artifactId>jackson-dataformat-xml</artifactId>
|
||||||
|
<version>2.9.10</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.dtflys.forest</groupId>
|
||||||
|
<artifactId>forest-core</artifactId>
|
||||||
|
<version>1.5.36</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-test</artifactId>
|
||||||
|
<version>2.7.13</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>5.8.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.bwie.goods;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class GoodsApp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(GoodsApp.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.bwie.goods.config;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
|
||||||
|
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @BelongsProject: 0107day02
|
||||||
|
* @BelongsPackage: com.bw.config
|
||||||
|
* @Author: zhupengfei
|
||||||
|
* @CreateTime: 2023-02-01 08:52
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class FastUtil {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(FastUtil.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FastFileStorageClient storageClient ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件 图片
|
||||||
|
*/
|
||||||
|
public String upload(MultipartFile multipartFile) throws Exception{
|
||||||
|
String originalFilename = multipartFile.getOriginalFilename().
|
||||||
|
substring(multipartFile.getOriginalFilename().
|
||||||
|
lastIndexOf(".") + 1);
|
||||||
|
StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
|
||||||
|
multipartFile.getInputStream(),
|
||||||
|
multipartFile.getSize(),originalFilename , null);
|
||||||
|
return storePath.getFullPath() ;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 删除文件
|
||||||
|
*/
|
||||||
|
public String deleteFile(String fileUrl) {
|
||||||
|
if (StringUtils.isEmpty(fileUrl)) {
|
||||||
|
log.info("fileUrl == >>文件路径为空...");
|
||||||
|
return "文件路径不能为空";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
StorePath storePath = StorePath.parseFromUrl(fileUrl);
|
||||||
|
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
return "删除成功";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.bwie.goods.controller;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.req.CeaNameEditReq;
|
||||||
|
import com.bwie.common.domain.req.CesNameQueryReq;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import com.bwie.goods.service.GoodsService;
|
||||||
|
import com.dtflys.forest.annotation.Post;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
public class GoodsController {
|
||||||
|
@Autowired
|
||||||
|
public GoodsService service;
|
||||||
|
|
||||||
|
@PostMapping("district")
|
||||||
|
public Result district(@RequestBody CeaNameEditReq ceaNameEditReq){
|
||||||
|
return service.district(ceaNameEditReq);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package com.bwie.goods.service;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.req.CeaNameEditReq;
|
||||||
|
import com.bwie.common.domain.req.CesNameQueryReq;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
|
||||||
|
public interface GoodsService {
|
||||||
|
Result district(CeaNameEditReq ceaNameEditReq);
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.bwie.goods.service.impl;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Cesname;
|
||||||
|
import com.bwie.common.domain.req.CeaNameEditReq;
|
||||||
|
import com.bwie.common.domain.req.CesNameQueryReq;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import com.bwie.goods.service.GoodsService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class GoodsServiceImpl implements GoodsService {
|
||||||
|
@Override
|
||||||
|
public Result district(CeaNameEditReq ceaNameEditReq) {
|
||||||
|
Cesname cesname = Cesname.editBuild(0l, ceaNameEditReq);
|
||||||
|
return Result.success(cesname);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Tomcat
|
||||||
|
server:
|
||||||
|
port: 9003
|
||||||
|
# Spring
|
||||||
|
spring:
|
||||||
|
main:
|
||||||
|
allow-circular-references: true
|
||||||
|
jackson:
|
||||||
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
|
time-zone: GMT+8
|
||||||
|
application:
|
||||||
|
# 应用名称
|
||||||
|
name: bwie-goods
|
||||||
|
profiles:
|
||||||
|
# 环境配置
|
||||||
|
active: dev
|
||||||
|
cloud:
|
||||||
|
nacos:
|
||||||
|
discovery:
|
||||||
|
# 服务注册地址
|
||||||
|
server-addr: 129.211.23.219:8848
|
||||||
|
config:
|
||||||
|
# 配置中心地址
|
||||||
|
server-addr: 129.211.23.219:8848
|
||||||
|
# 配置文件格式
|
||||||
|
file-extension: yml
|
||||||
|
# 共享配置
|
||||||
|
shared-configs:
|
||||||
|
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||||
|
rabbitmq:
|
||||||
|
host: 129.211.23.219
|
||||||
|
port: 5672
|
||||||
|
username: guest
|
||||||
|
password: guest
|
||||||
|
virtual-host: /
|
||||||
|
publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
|
||||||
|
publisher-returns: true #确认消息已发送到队列(Queue)
|
||||||
|
listener:
|
||||||
|
simple:
|
||||||
|
prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条
|
||||||
|
#acknowledge-mode: manual # 设置消费端手动ack确认
|
||||||
|
retry:
|
||||||
|
enabled: true # 是否支持重试
|
||||||
|
template:
|
||||||
|
# 只要消息抵达Queue,就会异步发送优先回调return firm
|
||||||
|
mandatory: true
|
||||||
|
redis:
|
||||||
|
host: 129.211.23.219
|
||||||
|
fdfs:
|
||||||
|
so-timeout: 1500 # socket 连接时长
|
||||||
|
connect-timeout: 600 # 连接 tracker 服务器超时时长 upload
|
||||||
|
# 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流
|
||||||
|
tracker-list: 129.211.23.219:22122
|
||||||
|
web-server-url: 129.211.23.219:8888
|
||||||
|
pool:
|
||||||
|
jmx-enabled: false
|
||||||
|
# 生成缩略图
|
||||||
|
thumb-image:
|
||||||
|
height: 500
|
||||||
|
width: 500
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="com.bwie.xxx.mapper.XxxMapper">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
|
@ -0,0 +1,90 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>g63d18</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>bwie-system</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<!--==============================================公共============================================================-->
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- 系统公共 依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>bwie-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SpringBoot Web-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Druid -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>druid-spring-boot-starter</artifactId>
|
||||||
|
<version>1.2.8</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mysql Connector -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mybatis 依赖配置 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
|
<version>2.2.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Pagehelper -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.pagehelper</groupId>
|
||||||
|
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||||
|
<version>1.4.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--图片上传-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.tobato</groupId>
|
||||||
|
<artifactId>fastdfs-client</artifactId>
|
||||||
|
<version>1.26.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- knife4j -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.xiaoymin</groupId>
|
||||||
|
<artifactId>knife4j-spring-boot-starter</artifactId>
|
||||||
|
<version>2.0.9</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- rabbitMQ -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 消息转换器 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||||
|
<artifactId>jackson-dataformat-xml</artifactId>
|
||||||
|
<version>2.9.10</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.bwie.system;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class SystemApp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(SystemApp.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.bwie.system.config;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
|
||||||
|
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @BelongsProject: 0107day02
|
||||||
|
* @BelongsPackage: com.bw.config
|
||||||
|
* @Author: zhupengfei
|
||||||
|
* @CreateTime: 2023-02-01 08:52
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class FastUtil {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(FastUtil.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FastFileStorageClient storageClient ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件 图片
|
||||||
|
*/
|
||||||
|
public String upload(MultipartFile multipartFile) throws Exception{
|
||||||
|
String originalFilename = multipartFile.getOriginalFilename().
|
||||||
|
substring(multipartFile.getOriginalFilename().
|
||||||
|
lastIndexOf(".") + 1);
|
||||||
|
StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
|
||||||
|
multipartFile.getInputStream(),
|
||||||
|
multipartFile.getSize(),originalFilename , null);
|
||||||
|
return storePath.getFullPath() ;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 删除文件
|
||||||
|
*/
|
||||||
|
public String deleteFile(String fileUrl) {
|
||||||
|
if (StringUtils.isEmpty(fileUrl)) {
|
||||||
|
log.info("fileUrl == >>文件路径为空...");
|
||||||
|
return "文件路径不能为空";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
StorePath storePath = StorePath.parseFromUrl(fileUrl);
|
||||||
|
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
return "删除成功";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.bwie.system.controller;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import com.bwie.common.result.Result;
|
||||||
|
import com.bwie.system.service.SystemService;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@Log4j2
|
||||||
|
public class SystemController {
|
||||||
|
@Autowired
|
||||||
|
private SystemService service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据号码查询用户
|
||||||
|
* @param tel
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("toLoginSel/{tel}")
|
||||||
|
public Result<Admin> toLoginSel(@PathVariable String tel){
|
||||||
|
Admin admin = service.toLoginSel(tel);
|
||||||
|
return Result.success(admin);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.bwie.system.mapper;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface SystemMapper {
|
||||||
|
Admin toLoginSel(@Param("tel") String tel);
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.bwie.system.service;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
|
||||||
|
public interface SystemService {
|
||||||
|
Admin toLoginSel(String tel);
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.bwie.system.service.impl;
|
||||||
|
|
||||||
|
import com.bwie.common.domain.Admin;
|
||||||
|
import com.bwie.system.mapper.SystemMapper;
|
||||||
|
import com.bwie.system.service.SystemService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SystemServiceImpl implements SystemService {
|
||||||
|
@Autowired
|
||||||
|
private SystemMapper mapper;
|
||||||
|
@Override
|
||||||
|
public Admin toLoginSel(String tel) {
|
||||||
|
return mapper.toLoginSel(tel);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
# Tomcat
|
||||||
|
server:
|
||||||
|
port: 9004
|
||||||
|
# Spring
|
||||||
|
spring:
|
||||||
|
main:
|
||||||
|
allow-circular-references: true
|
||||||
|
jackson:
|
||||||
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
|
time-zone: GMT+8
|
||||||
|
application:
|
||||||
|
# 应用名称
|
||||||
|
name: bwie-system
|
||||||
|
profiles:
|
||||||
|
# 环境配置
|
||||||
|
active: dev
|
||||||
|
cloud:
|
||||||
|
nacos:
|
||||||
|
discovery:
|
||||||
|
# 服务注册地址
|
||||||
|
server-addr: 129.211.23.219:8848
|
||||||
|
config:
|
||||||
|
# 配置中心地址
|
||||||
|
server-addr: 129.211.23.219:8848
|
||||||
|
# 配置文件格式
|
||||||
|
file-extension: yml
|
||||||
|
# 共享配置
|
||||||
|
shared-configs:
|
||||||
|
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||||
|
rabbitmq:
|
||||||
|
host: 129.211.23.219
|
||||||
|
port: 5672
|
||||||
|
username: guest
|
||||||
|
password: guest
|
||||||
|
virtual-host: /
|
||||||
|
publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
|
||||||
|
publisher-returns: true #确认消息已发送到队列(Queue)
|
||||||
|
listener:
|
||||||
|
simple:
|
||||||
|
prefetch: 1 # 每次只能获取一条,处理完成才能获取下一条
|
||||||
|
#acknowledge-mode: manual # 设置消费端手动ack确认
|
||||||
|
retry:
|
||||||
|
enabled: true # 是否支持重试
|
||||||
|
template:
|
||||||
|
# 只要消息抵达Queue,就会异步发送优先回调return firm
|
||||||
|
mandatory: true
|
||||||
|
redis:
|
||||||
|
host: 129.211.23.219
|
||||||
|
fdfs:
|
||||||
|
so-timeout: 1500 # socket 连接时长
|
||||||
|
connect-timeout: 600 # 连接 tracker 服务器超时时长 upload
|
||||||
|
# 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流
|
||||||
|
tracker-list: 129.211.23.219:22122
|
||||||
|
web-server-url: 129.211.23.219:8888
|
||||||
|
pool:
|
||||||
|
jmx-enabled: false
|
||||||
|
# 生成缩略图
|
||||||
|
thumb-image:
|
||||||
|
height: 500
|
||||||
|
width: 500
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="com.bwie.system.mapper.SystemMapper">
|
||||||
|
|
||||||
|
|
||||||
|
<select id="toLoginSel" resultType="com.bwie.common.domain.Admin">
|
||||||
|
select *
|
||||||
|
from admin where tel = #{tel};
|
||||||
|
</select>
|
||||||
|
</mapper>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>g63d18</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>bwie-moudels</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
|
@ -1,41 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# 复制项目的文件到对应docker路径,便于一键生成镜像。
|
|
||||||
usage() {
|
|
||||||
echo "Usage: sh copy.sh"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# copy sql
|
|
||||||
echo "begin copy sql "
|
|
||||||
cp ../sql/ry_20230706.sql ./mysql/db
|
|
||||||
cp ../sql/ry_config_20220929.sql ./mysql/db
|
|
||||||
|
|
||||||
# copy html
|
|
||||||
echo "begin copy html "
|
|
||||||
cp -r ../muyu-ui/dist/** ./nginx/html/dist
|
|
||||||
|
|
||||||
|
|
||||||
# copy jar
|
|
||||||
echo "begin copy muyu-gateway "
|
|
||||||
cp ../muyu-gateway/target/muyu-gateway.jar ./muyu/gateway/jar
|
|
||||||
|
|
||||||
echo "begin copy muyu-auth "
|
|
||||||
cp ../muyu-auth/target/muyu-auth.jar ./muyu/auth/jar
|
|
||||||
|
|
||||||
echo "begin copy muyu-visual "
|
|
||||||
cp ../muyu-visual/muyu-monitor/target/muyu-visual-monitor.jar ./muyu/visual/monitor/jar
|
|
||||||
|
|
||||||
echo "begin copy muyu-modules-system "
|
|
||||||
cp ../muyu-modules/muyu-system/target/muyu-modules-system.jar ./muyu/modules/system/jar
|
|
||||||
|
|
||||||
echo "begin copy muyu-modules-file "
|
|
||||||
cp ../muyu-modules/muyu-file/target/muyu-modules-file.jar ./muyu/modules/file/jar
|
|
||||||
|
|
||||||
echo "begin copy muyu-modules-job "
|
|
||||||
cp ../muyu-modules/muyu-job/target/muyu-modules-job.jar ./muyu/modules/job/jar
|
|
||||||
|
|
||||||
echo "begin copy muyu-modules-gen "
|
|
||||||
cp ../muyu-modules/muyu-gen/target/muyu-modules-gen.jar ./muyu/modules/gen/jar
|
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# 使用说明,用来提示输入参数
|
|
||||||
usage() {
|
|
||||||
echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# 开启所需端口
|
|
||||||
port(){
|
|
||||||
firewall-cmd --add-port=80/tcp --permanent
|
|
||||||
firewall-cmd --add-port=8080/tcp --permanent
|
|
||||||
firewall-cmd --add-port=8848/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9848/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9849/tcp --permanent
|
|
||||||
firewall-cmd --add-port=6379/tcp --permanent
|
|
||||||
firewall-cmd --add-port=3306/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9100/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9200/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9201/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9202/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9203/tcp --permanent
|
|
||||||
firewall-cmd --add-port=9300/tcp --permanent
|
|
||||||
service firewalld restart
|
|
||||||
}
|
|
||||||
|
|
||||||
# 启动基础环境(必须)
|
|
||||||
base(){
|
|
||||||
docker-compose up -d muyu-mysql muyu-redis muyu-nacos
|
|
||||||
}
|
|
||||||
|
|
||||||
# 启动程序模块(必须)
|
|
||||||
modules(){
|
|
||||||
docker-compose up -d muyu-nginx muyu-gateway muyu-auth muyu-modules-system
|
|
||||||
}
|
|
||||||
|
|
||||||
# 关闭所有环境/模块
|
|
||||||
stop(){
|
|
||||||
docker-compose stop
|
|
||||||
}
|
|
||||||
|
|
||||||
# 删除所有环境/模块
|
|
||||||
rm(){
|
|
||||||
docker-compose rm
|
|
||||||
}
|
|
||||||
|
|
||||||
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
|
|
||||||
case "$1" in
|
|
||||||
"port")
|
|
||||||
port
|
|
||||||
;;
|
|
||||||
"base")
|
|
||||||
base
|
|
||||||
;;
|
|
||||||
"modules")
|
|
||||||
modules
|
|
||||||
;;
|
|
||||||
"stop")
|
|
||||||
stop
|
|
||||||
;;
|
|
||||||
"rm")
|
|
||||||
rm
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
|
@ -1,140 +0,0 @@
|
||||||
version : '3.8'
|
|
||||||
services:
|
|
||||||
muyu-nacos:
|
|
||||||
container_name: muyu-nacos
|
|
||||||
image: nacos/nacos-server
|
|
||||||
build:
|
|
||||||
context: ./nacos
|
|
||||||
environment:
|
|
||||||
- MODE=standalone
|
|
||||||
volumes:
|
|
||||||
- ./nacos/logs/:/home/nacos/logs
|
|
||||||
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
|
|
||||||
ports:
|
|
||||||
- "8848:8848"
|
|
||||||
- "9848:9848"
|
|
||||||
- "9849:9849"
|
|
||||||
depends_on:
|
|
||||||
- muyu-mysql
|
|
||||||
muyu-mysql:
|
|
||||||
container_name: muyu-mysql
|
|
||||||
image: mysql:5.7
|
|
||||||
build:
|
|
||||||
context: ./mysql
|
|
||||||
ports:
|
|
||||||
- "3306:3306"
|
|
||||||
volumes:
|
|
||||||
- ./mysql/conf:/etc/mysql/conf.d
|
|
||||||
- ./mysql/logs:/logs
|
|
||||||
- ./mysql/data:/var/lib/mysql
|
|
||||||
command: [
|
|
||||||
'mysqld',
|
|
||||||
'--innodb-buffer-pool-size=80M',
|
|
||||||
'--character-set-server=utf8mb4',
|
|
||||||
'--collation-server=utf8mb4_unicode_ci',
|
|
||||||
'--default-time-zone=+8:00',
|
|
||||||
'--lower-case-table-names=1'
|
|
||||||
]
|
|
||||||
environment:
|
|
||||||
MYSQL_DATABASE: 'ry-cloud'
|
|
||||||
MYSQL_ROOT_PASSWORD: password
|
|
||||||
muyu-redis:
|
|
||||||
container_name: muyu-redis
|
|
||||||
image: redis
|
|
||||||
build:
|
|
||||||
context: ./redis
|
|
||||||
ports:
|
|
||||||
- "6379:6379"
|
|
||||||
volumes:
|
|
||||||
- ./redis/conf/redis.conf:/home/muyu/redis/redis.conf
|
|
||||||
- ./redis/data:/data
|
|
||||||
command: redis-server /home/muyu/redis/redis.conf
|
|
||||||
muyu-nginx:
|
|
||||||
container_name: muyu-nginx
|
|
||||||
image: nginx
|
|
||||||
build:
|
|
||||||
context: ./nginx
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
volumes:
|
|
||||||
- ./nginx/html/dist:/home/muyu/projects/muyu-ui
|
|
||||||
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
|
|
||||||
- ./nginx/logs:/var/log/nginx
|
|
||||||
- ./nginx/conf.d:/etc/nginx/conf.d
|
|
||||||
depends_on:
|
|
||||||
- muyu-gateway
|
|
||||||
links:
|
|
||||||
- muyu-gateway
|
|
||||||
muyu-gateway:
|
|
||||||
container_name: muyu-gateway
|
|
||||||
build:
|
|
||||||
context: ./muyu/gateway
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
depends_on:
|
|
||||||
- muyu-redis
|
|
||||||
links:
|
|
||||||
- muyu-redis
|
|
||||||
muyu-auth:
|
|
||||||
container_name: muyu-auth
|
|
||||||
build:
|
|
||||||
context: ./muyu/auth
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "9200:9200"
|
|
||||||
depends_on:
|
|
||||||
- muyu-redis
|
|
||||||
links:
|
|
||||||
- muyu-redis
|
|
||||||
muyu-modules-system:
|
|
||||||
container_name: muyu-modules-system
|
|
||||||
build:
|
|
||||||
context: ./muyu/modules/system
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "9201:9201"
|
|
||||||
depends_on:
|
|
||||||
- muyu-redis
|
|
||||||
- muyu-mysql
|
|
||||||
links:
|
|
||||||
- muyu-redis
|
|
||||||
- muyu-mysql
|
|
||||||
muyu-modules-gen:
|
|
||||||
container_name: muyu-modules-gen
|
|
||||||
build:
|
|
||||||
context: ./muyu/modules/gen
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "9202:9202"
|
|
||||||
depends_on:
|
|
||||||
- muyu-mysql
|
|
||||||
links:
|
|
||||||
- muyu-mysql
|
|
||||||
muyu-modules-job:
|
|
||||||
container_name: muyu-modules-job
|
|
||||||
build:
|
|
||||||
context: ./muyu/modules/job
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "9203:9203"
|
|
||||||
depends_on:
|
|
||||||
- muyu-mysql
|
|
||||||
links:
|
|
||||||
- muyu-mysql
|
|
||||||
muyu-modules-file:
|
|
||||||
container_name: muyu-modules-file
|
|
||||||
build:
|
|
||||||
context: ./muyu/modules/file
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "9300:9300"
|
|
||||||
volumes:
|
|
||||||
- ./muyu/uploadPath:/home/muyu/uploadPath
|
|
||||||
muyu-visual-monitor:
|
|
||||||
container_name: muyu-visual-monitor
|
|
||||||
build:
|
|
||||||
context: ./muyu/visual/monitor
|
|
||||||
dockerfile: dockerfile
|
|
||||||
ports:
|
|
||||||
- "9100:9100"
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-auth.jar /home/muyu/muyu-auth.jar
|
|
||||||
# 启动认证服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-auth.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放认证中心打包好的jar文件,用于docker启动应用。
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-gateway.jar /home/muyu/muyu-gateway.jar
|
|
||||||
# 启动网关服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-gateway.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放网关模块打包好的jar文件,用于docker启动应用。
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-modules-file.jar /home/muyu/muyu-modules-file.jar
|
|
||||||
# 启动文件服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-modules-file.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放文件服务打包好的jar文件,用于docker启动应用。
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-modules-gen.jar /home/muyu/muyu-modules-gen.jar
|
|
||||||
# 启动代码生成服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-modules-gen.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放代码生成打包好的jar文件,用于docker启动应用。
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-modules-job.jar /home/muyu/muyu-modules-job.jar
|
|
||||||
# 启动定时任务服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-modules-job.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放定时任务打包好的jar文件,用于docker启动应用。
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-modules-system.jar /home/muyu/muyu-modules-system.jar
|
|
||||||
# 启动系统服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-modules-system.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放系统模块打包好的jar文件,用于docker启动应用。
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM openjdk:8-jre
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu
|
|
||||||
# 复制jar文件到路径
|
|
||||||
COPY ./jar/muyu-visual-monitor.jar /home/muyu/muyu-visual-monitor.jar
|
|
||||||
# 启动系统服务
|
|
||||||
ENTRYPOINT ["java","-jar","muyu-visual-monitor.jar"]
|
|
|
@ -1 +0,0 @@
|
||||||
存放监控中心打包好的jar文件,用于docker启动应用。
|
|
|
@ -1 +0,0 @@
|
||||||
存放sql目录下的所有脚本,用于docker自动执行。
|
|
|
@ -1,7 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM mysql:5.7
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 执行sql脚本
|
|
||||||
ADD ./db/*.sql /docker-entrypoint-initdb.d/
|
|
|
@ -1,32 +0,0 @@
|
||||||
spring.datasource.platform=mysql
|
|
||||||
db.num=1
|
|
||||||
db.url.0=jdbc:mysql://muyu-mysql:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
|
|
||||||
db.user=root
|
|
||||||
db.password=password
|
|
||||||
|
|
||||||
nacos.naming.empty-service.auto-clean=true
|
|
||||||
nacos.naming.empty-service.clean.initial-delay-ms=50000
|
|
||||||
nacos.naming.empty-service.clean.period-time-ms=30000
|
|
||||||
|
|
||||||
management.endpoints.web.exposure.include=*
|
|
||||||
|
|
||||||
management.metrics.export.elastic.enabled=false
|
|
||||||
management.metrics.export.influx.enabled=false
|
|
||||||
|
|
||||||
server.tomcat.accesslog.enabled=true
|
|
||||||
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
|
|
||||||
|
|
||||||
server.tomcat.basedir=/home/muyu/nacos/tomcat/logs
|
|
||||||
|
|
||||||
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
|
|
||||||
|
|
||||||
nacos.core.auth.system.type=nacos
|
|
||||||
nacos.core.auth.enabled=false
|
|
||||||
nacos.core.auth.default.token.expire.seconds=18000
|
|
||||||
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
|
|
||||||
nacos.core.auth.caching.enabled=true
|
|
||||||
nacos.core.auth.enable.userAgentAuthWhite=false
|
|
||||||
nacos.core.auth.server.identity.key=serverIdentity
|
|
||||||
nacos.core.auth.server.identity.value=security
|
|
||||||
|
|
||||||
nacos.istio.mcp.server.enabled=false
|
|
|
@ -1,7 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM nacos/nacos-server
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 复制conf文件到路径
|
|
||||||
COPY ./conf/application.properties /home/nacos/conf/application.properties
|
|
|
@ -1,41 +0,0 @@
|
||||||
worker_processes 1;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
include mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
sendfile on;
|
|
||||||
keepalive_timeout 65;
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name localhost;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
root /home/muyu/projects/muyu-ui;
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
index index.html index.htm;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /prod-api/{
|
|
||||||
proxy_set_header Host $http_host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header REMOTE-HOST $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_pass http://muyu-gateway:8080/;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 避免actuator暴露
|
|
||||||
if ($request_uri ~ "/actuator") {
|
|
||||||
return 403;
|
|
||||||
}
|
|
||||||
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
|
||||||
location = /50x.html {
|
|
||||||
root html;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
# 基础镜像
|
|
||||||
FROM nginx
|
|
||||||
# author
|
|
||||||
MAINTAINER muyu
|
|
||||||
|
|
||||||
# 挂载目录
|
|
||||||
VOLUME /home/muyu/projects/muyu-ui
|
|
||||||
# 创建目录
|
|
||||||
RUN mkdir -p /home/muyu/projects/muyu-ui
|
|
||||||
# 指定路径
|
|
||||||
WORKDIR /home/muyu/projects/muyu-ui
|
|
||||||
# 复制conf文件到路径
|
|
||||||
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
|
|
||||||
# 复制html文件到路径
|
|
||||||
COPY ./html/dist /home/muyu/projects/muyu-ui
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue