Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Eladmin
Commits
7b91c440
Commit
7b91c440
authored
Nov 22, 2021
by
Zheng Jie
Browse files
使用 mica-ip2region 解析IP地址信息
parent
08f6c582
Changes
4
Hide whitespace changes
Inline
Side-by-side
eladmin-common/src/main/java/me/zhengjie/config/ElAdminProperties.java
0 → 100644
View file @
7b91c440
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
me.zhengjie.config
;
import
lombok.Data
;
import
me.zhengjie.utils.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author Zheng Jie
* @description
* @date 2021-11-22
**/
@Data
@Component
public
class
ElAdminProperties
{
public
static
Boolean
ipLocal
;
@Value
(
"${ip.local-parsing}"
)
public
void
setIpLocal
(
Boolean
ipLocal
)
{
ElAdminProperties
.
ipLocal
=
ipLocal
;
}
}
eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java
View file @
7b91c440
...
...
@@ -18,18 +18,13 @@ package me.zhengjie.utils;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
me.zhengjie.config.ElAdminProperties
;
import
net.dreamlu.mica.ip2region.core.Ip2regionSearcher
;
import
net.dreamlu.mica.ip2region.core.IpInfo
;
import
nl.basjes.parse.useragent.UserAgent
;
import
nl.basjes.parse.useragent.UserAgentAnalyzer
;
import
org.lionsoul.ip2region.DataBlock
;
import
org.lionsoul.ip2region.DbConfig
;
import
org.lionsoul.ip2region.DbSearcher
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.core.io.ClassPathResource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.File
;
import
java.net.Inet4Address
;
import
java.net.InetAddress
;
import
java.net.NetworkInterface
;
import
java.net.UnknownHostException
;
...
...
@@ -41,42 +36,25 @@ import java.util.Enumeration;
* @author Zheng Jie
* 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
*/
@Slf4j
public
class
StringUtils
extends
org
.
apache
.
commons
.
lang3
.
StringUtils
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
StringUtils
.
class
);
private
static
boolean
ipLocal
=
false
;
private
static
File
file
=
null
;
private
static
DbConfig
config
;
private
static
final
char
SEPARATOR
=
'_'
;
private
static
final
String
UNKNOWN
=
"unknown"
;
private
static
final
UserAgentAnalyzer
userAgentAnalyzer
=
UserAgentAnalyzer
/**
* 注入bean
*/
private
final
static
Ip2regionSearcher
IP_SEARCHER
=
SpringContextHolder
.
getBean
(
Ip2regionSearcher
.
class
);
private
static
final
UserAgentAnalyzer
USER_AGENT_ANALYZER
=
UserAgentAnalyzer
.
newBuilder
()
.
hideMatcherLoadStats
()
.
withCache
(
10000
)
.
withField
(
UserAgent
.
AGENT_NAME_VERSION
)
.
build
();
static
{
SpringContextHolder
.
addCallBacks
(()
->
{
StringUtils
.
ipLocal
=
SpringContextHolder
.
getProperties
(
"ip.local-parsing"
,
false
,
Boolean
.
class
);
if
(
ipLocal
)
{
/*
* 此文件为独享 ,不必关闭
*/
String
path
=
"ip2region/ip2region.db"
;
String
name
=
"ip2region.db"
;
try
{
config
=
new
DbConfig
();
file
=
FileUtil
.
inputStreamToFile
(
new
ClassPathResource
(
path
).
getInputStream
(),
name
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
}
}
});
}
/**
* 驼峰命名法工具
*
...
...
@@ -196,7 +174,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
* 根据ip获取详细地址
*/
public
static
String
getCityInfo
(
String
ip
)
{
if
(
ipLocal
)
{
if
(
ElAdminProperties
.
ipLocal
)
{
return
getLocalCityInfo
(
ip
);
}
else
{
return
getHttpCityInfo
(
ip
);
...
...
@@ -216,27 +194,16 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
* 根据ip获取详细地址
*/
public
static
String
getLocalCityInfo
(
String
ip
)
{
try
{
DbSearcher
dbSearcher
=
new
DbSearcher
(
config
,
file
.
getPath
());
DataBlock
dataBlock
=
dbSearcher
.
binarySearch
(
ip
);
String
region
=
dataBlock
.
getRegion
();
String
address
=
region
.
replace
(
"0|"
,
""
);
char
symbol
=
'|'
;
if
(
address
.
charAt
(
address
.
length
()
-
1
)
==
symbol
)
{
address
=
address
.
substring
(
0
,
address
.
length
()
-
1
);
}
if
(
dataBlock
!=
null
){
dbSearcher
.
close
();
}
return
address
.
equals
(
ElAdminConstant
.
REGION
)
?
"内网IP"
:
address
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
IpInfo
ipInfo
=
IP_SEARCHER
.
memorySearch
(
ip
);
if
(
ipInfo
!=
null
){
return
ipInfo
.
getAddress
();
}
return
""
;
return
null
;
}
public
static
String
getBrowser
(
HttpServletRequest
request
)
{
UserAgent
.
ImmutableUserAgent
userAgent
=
userAgentAnalyzer
.
parse
(
request
.
getHeader
(
"User-Agent"
));
UserAgent
.
ImmutableUserAgent
userAgent
=
USER_AGENT_ANALYZER
.
parse
(
request
.
getHeader
(
"User-Agent"
));
return
userAgent
.
get
(
UserAgent
.
AGENT_NAME_VERSION
).
getValue
();
}
...
...
eladmin-system/src/main/resources/ip2region/ip2region.db
deleted
100644 → 0
View file @
08f6c582
File deleted
pom.xml
View file @
7b91c440
...
...
@@ -139,12 +139,15 @@
<artifactId>
druid-spring-boot-starter
</artifactId>
<version>
${druid.version}
</version>
</dependency>
<!-- ip2region IP库 -->
<dependency>
<groupId>
org.lionsoul
</groupId>
<artifactId>
ip2region
</artifactId>
<version>
1.7.2
</version>
<groupId>
net.dreamlu
</groupId>
<artifactId>
mica-
ip2region
</artifactId>
<version>
2.5.6
</version>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>
org.projectlombok
</groupId>
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment