Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sv-springboot
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bsoft
sv-springboot
Commits
e085ac44
Commit
e085ac44
authored
Mar 03, 2021
by
宋振民
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:系统安全功能完善
parent
75dd53d1
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
666 additions
and
25 deletions
+666
-25
hs-admin/src/main/java/com/hs/admin/controller/UserController.java
+11
-0
hs-admin/src/main/java/com/hs/admin/model/SysUser.java
+21
-0
hs-admin/src/main/java/com/hs/admin/model/reqmodel/UserReq.java
+21
-0
hs-admin/src/main/java/com/hs/admin/service/UserService.java
+2
-0
hs-admin/src/main/java/com/hs/admin/service/impl/UserServiceImpl.java
+14
-0
hs-admin/src/main/resources/mapper/SysUserMapper.xml
+3
-1
hs-api/src/main/java/com/hs/api/common/enums/SysConfigKeyType.java
+8
-7
hs-api/src/main/java/com/hs/api/common/utils/DateUtils.java
+503
-0
hs-api/src/main/java/com/hs/api/mapper/SysConfigMapper.java
+2
-1
hs-api/src/main/java/com/hs/api/model/SysUser.java
+25
-0
hs-api/src/main/java/com/hs/api/service/Impl/LoginServiceImpl.java
+33
-1
hs-api/src/main/java/com/hs/api/service/Impl/SysConfigServiceImpl.java
+12
-12
hs-api/src/main/java/com/hs/api/service/SysConfigService.java
+2
-0
hs-api/src/main/resources/mapper/SysConfigMapper.xml
+1
-1
hs-api/src/main/resources/mapper/SysUserMapper.xml
+8
-2
No files found.
hs-admin/src/main/java/com/hs/admin/controller/UserController.java
View file @
e085ac44
...
...
@@ -88,6 +88,17 @@ public class UserController {
return
Result
.
error
();
}
@PostMapping
(
"unlock"
)
@Token
@ApiOperation
(
"解锁用户"
)
public
Object
unlockUser
(
@RequestBody
UserReq
.
UnlockUserReq
user
)
throws
Exception
{
boolean
result
=
userService
.
unlockUser
(
user
);
if
(
result
)
return
Result
.
success
(
null
);
else
return
Result
.
error
();
}
@PostMapping
(
"update"
)
@Token
@ApiOperation
(
"修改用户"
)
...
...
hs-admin/src/main/java/com/hs/admin/model/SysUser.java
View file @
e085ac44
...
...
@@ -33,10 +33,14 @@ public class SysUser {
private
Date
lastTime
;
private
Date
lastUpdatePwdTime
;
private
String
lastIp
;
private
boolean
isAdmin
;
private
boolean
lockFlag
;
public
Integer
getId
()
{
return
id
;
}
...
...
@@ -164,4 +168,20 @@ public class SysUser {
public
void
setIsAdmin
(
boolean
isAdmin
)
{
this
.
isAdmin
=
isAdmin
;
}
public
Date
getLastUpdatePwdTime
()
{
return
lastUpdatePwdTime
;
}
public
void
setLastUpdatePwdTime
(
Date
lastUpdatePwdTime
)
{
this
.
lastUpdatePwdTime
=
lastUpdatePwdTime
;
}
public
boolean
getLockFlag
()
{
return
lockFlag
;
}
public
void
setLockFlag
(
boolean
lockFlag
)
{
this
.
lockFlag
=
lockFlag
;
}
}
\ No newline at end of file
hs-admin/src/main/java/com/hs/admin/model/reqmodel/UserReq.java
View file @
e085ac44
...
...
@@ -165,6 +165,27 @@ public class UserReq {
}
}
public
static
class
UnlockUserReq
{
@ApiModelProperty
(
value
=
"用户ID"
,
required
=
true
)
@NotNull
(
message
=
"用户ID 参数必传"
)
private
Integer
userId
;
public
Integer
getUserId
()
{
return
userId
;
}
public
void
setUserId
(
Integer
userId
)
{
this
.
userId
=
userId
;
}
@Override
public
String
toString
()
{
return
"UnlockReq{"
+
"userId="
+
userId
+
'}'
;
}
}
public
static
class
UpdateUserReq
{
@ApiModelProperty
(
value
=
"用户ID"
,
required
=
true
)
@NotNull
(
message
=
"用户ID 参数必传"
)
...
...
hs-admin/src/main/java/com/hs/admin/service/UserService.java
View file @
e085ac44
...
...
@@ -17,6 +17,8 @@ public interface UserService {
boolean
deleteUser
(
UserReq
.
DeleteUserReq
user
);
boolean
unlockUser
(
UserReq
.
UnlockUserReq
user
);
boolean
updateUser
(
UpdateUserReq
user
);
List
<
SysUserList
>
getAll
(
UserReq
.
GetUserReq
user
);
...
...
hs-admin/src/main/java/com/hs/admin/service/impl/UserServiceImpl.java
View file @
e085ac44
...
...
@@ -54,6 +54,7 @@ public class UserServiceImpl implements UserService {
sysUser
.
setMobile
(
user
.
getMobile
());
sysUser
.
setSex
(
user
.
getSex
());
sysUser
.
setCreateDate
(
new
Date
());
sysUser
.
setLastUpdatePwdTime
(
new
Date
());
sysUser
.
setCreateUserid
(
userId
);
sysUser
.
setState
((
short
)
StateType
.
ON
.
getValue
());
sysUser
.
setIsAdmin
(
user
.
getIsAdmin
());
...
...
@@ -84,6 +85,19 @@ public class UserServiceImpl implements UserService {
}
@Override
public
boolean
unlockUser
(
UserReq
.
UnlockUserReq
user
)
{
if
(
user
!=
null
)
{
SysUser
sysUser
=
sysUserMapper
.
selectByPrimaryKey
(
user
.
getUserId
());
if
(
sysUser
!=
null
)
{
sysUser
.
setLockFlag
(
false
);
sysUserMapper
.
updateByPrimaryKey
(
sysUser
);
return
true
;
}
}
return
false
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
updateUser
(
UpdateUserReq
user
)
{
if
(
user
!=
null
)
{
...
...
hs-admin/src/main/resources/mapper/SysUserMapper.xml
View file @
e085ac44
...
...
@@ -18,6 +18,7 @@
<result
column=
"LAST_TIME"
jdbcType=
"TIMESTAMP"
property=
"lastTime"
/>
<result
column=
"LAST_IP"
jdbcType=
"VARCHAR"
property=
"lastIp"
/>
<result
column=
"IS_ADMIN"
jdbcType=
"BOOLEAN"
property=
"isAdmin"
/>
<result
column=
"LOCK_FLAG"
jdbcType=
"BOOLEAN"
property=
"lockFlag"
/>
</resultMap>
<resultMap
id=
"SysUserList"
extends=
"BaseResultMap"
type=
"com.hs.admin.model.respmodel.SysUserList"
>
<result
column=
"ROLE_ID"
jdbcType=
"INTEGER"
property=
"roleId"
/>
...
...
@@ -61,7 +62,8 @@
ERROR_TIME = #{errorTime,jdbcType=TIMESTAMP},
LAST_TIME = #{lastTime,jdbcType=TIMESTAMP},
LAST_IP = #{lastIp,jdbcType=VARCHAR},
IS_ADMIN = #{isAdmin,jdbcType=VARCHAR}
IS_ADMIN = #{isAdmin,jdbcType=VARCHAR},
LOCK_FLAG = #{lockFlag,jdbcType=VARCHAR}
where ID = #{id,jdbcType=INTEGER}
</update>
<select
id=
"selectByPrimaryKey"
parameterType=
"java.lang.Integer"
resultMap=
"BaseResultMap"
>
...
...
hs-api/src/main/java/com/hs/api/common/enums/SysConfigKeyType.java
View file @
e085ac44
...
...
@@ -8,18 +8,19 @@ import java.util.Map;
public
enum
SysConfigKeyType
{
MAC_ADDRESS_RANGE
(
"MAC_ADDRESS_RANGE"
,
"MAC地址范围过滤"
),
MAC_BINDING
(
"MAC_BINDING"
,
"MAC地址绑定"
);
MAC_BINDING
(
"MAC_BINDING"
,
"MAC地址绑定"
),
PWD_TIME_LIMIT
(
"PWD_TIME_LIMIT"
,
"密码有效期"
);
private
String
valu
e
;
private
String
cod
e
;
private
String
desc
;
SysConfigKeyType
(
String
valu
e
,
String
desc
)
{
this
.
value
=
valu
e
;
SysConfigKeyType
(
String
cod
e
,
String
desc
)
{
this
.
code
=
cod
e
;
this
.
desc
=
desc
;
}
public
String
get
Valu
e
()
{
return
valu
e
;
public
String
get
Cod
e
()
{
return
cod
e
;
}
public
String
getDesc
()
{
...
...
@@ -31,7 +32,7 @@ public enum SysConfigKeyType {
for
(
SysConfigKeyType
projectType
:
values
()){
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>()
{
{
put
(
"
value"
,
projectType
.
getValu
e
());
put
(
"
code"
,
projectType
.
getCod
e
());
put
(
"description"
,
projectType
.
getDesc
());
}
};
...
...
hs-api/src/main/java/com/hs/api/common/utils/DateUtils.java
0 → 100644
View file @
e085ac44
package
com
.
hs
.
api
.
common
.
utils
;
import
java.text.DecimalFormat
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
org.apache.commons.lang3.time.DateFormatUtils
;
public
class
DateUtils
{
/**
* 仅显示年月日,例如 2015-08-11.
*/
public
static
final
String
DATE_FORMAT
=
"yyyy-MM-dd"
;
/**
* 显示年月日时分秒,例如 2015-08-11 09:51:53.
*/
public
static
final
String
DATETIME_FORMAT
=
"yyyy-MM-dd HH:mm:ss"
;
/**
* 仅显示时分秒,例如 09:51:53.
*/
public
static
final
String
TIME_FORMAT
=
"HH:mm:ss"
;
/**
* 每天的毫秒数 8640000.
*/
public
static
final
long
MILLISECONDS_PER_DAY
=
86400000L
;
/**
* 每周的天数.
*/
public
static
final
long
DAYS_PER_WEEK
=
7L
;
/**
* 每小时毫秒数.
*/
public
static
final
long
MILLISECONDS_PER_HOUR
=
3600000L
;
/**
* 每分钟秒数.
*/
public
static
final
long
SECONDS_PER_MINUTE
=
60L
;
/**
* 每小时秒数.
*/
public
static
final
long
SECONDS_PER_HOUR
=
3600L
;
/**
* 每天秒数.
*/
public
static
final
long
SECONDS_PER_DAY
=
86400L
;
/**
* 每个月秒数,默认每月30天.
*/
public
static
final
long
SECONDS_PER_MONTH
=
2592000L
;
/**
* 每年秒数,默认每年365天.
*/
public
static
final
long
SECONDS_PER_YEAR
=
31536000L
;
/**
* 常用的时间格式.
*/
private
static
String
[]
parsePatterns
=
{
"yyyy-MM-dd"
,
"yyyy-MM-dd HH:mm:ss"
,
"yyyy-MM-dd HH:mm"
,
"yyyy/MM/dd"
,
"yyyy/MM/dd HH:mm:ss"
,
"yyyy/MM/dd HH:mm"
};
/**
* 得到当前日期字符串.
* @return String 日期字符串,例如2015-08-11
* @since 1.0
*/
public
static
String
getDate
()
{
return
getDate
(
DateUtils
.
DATE_FORMAT
);
}
/**
* 得到当前时间字符串.
* @return String 时间字符串,例如 09:51:53
* @since 1.0
*/
public
static
String
getTime
()
{
return
formatDate
(
new
Date
(),
DateUtils
.
TIME_FORMAT
);
}
/**
* 得到当前日期和时间字符串.
* @return String 日期和时间字符串,例如 2015-08-11 09:51:53
* @since 1.0
*/
public
static
String
getDateTime
()
{
return
formatDate
(
new
Date
(),
DateUtils
.
DATETIME_FORMAT
);
}
/**
* 获取当前时间指定格式下的字符串.
* @param pattern
* 转化后时间展示的格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等
* @return String 格式转换之后的时间字符串.
* @since 1.0
*/
public
static
String
getDate
(
String
pattern
)
{
return
DateFormatUtils
.
format
(
new
Date
(),
pattern
);
}
/**
* 获取指定日期的字符串格式.
* @param date 需要格式化的时间,不能为空
* @param pattern 时间格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等
* @return String 格式转换之后的时间字符串.
* @since 1.0
*/
public
static
String
getDate
(
Date
date
,
String
pattern
)
{
return
DateFormatUtils
.
format
(
date
,
pattern
);
}
/**
* 获取日期时间字符串,默认格式为(yyyy-MM-dd).
* @param date 需要转化的日期时间
* @param pattern 时间格式,例如"yyyy-MM-dd" "HH:mm:ss" "E"等
* @return String 格式转换后的时间字符串
* @since 1.0
*/
public
static
String
formatDate
(
Date
date
,
Object
...
pattern
)
{
String
formatDate
=
null
;
if
(
pattern
!=
null
&&
pattern
.
length
>
0
)
{
formatDate
=
DateFormatUtils
.
format
(
date
,
pattern
[
0
].
toString
());
}
else
{
formatDate
=
DateFormatUtils
.
format
(
date
,
DateUtils
.
DATE_FORMAT
);
}
return
formatDate
;
}
/**
* 获取当前年份字符串.
* @return String 当前年份字符串,例如 2015
* @since 1.0
*/
public
static
String
getYear
()
{
return
formatDate
(
new
Date
(),
"yyyy"
);
}
/**
* 获取当前月份字符串.
* @return String 当前月份字符串,例如 08
* @since 1.0
*/
public
static
String
getMonth
()
{
return
formatDate
(
new
Date
(),
"MM"
);
}
/**
* 获取当前天数字符串.
* @return String 当前天数字符串,例如 11
* @since 1.0
*/
public
static
String
getDay
()
{
return
formatDate
(
new
Date
(),
"dd"
);
}
/**
* 获取当前星期字符串.
* @return String 当前星期字符串,例如星期二
* @since 1.0
*/
public
static
String
getWeek
()
{
return
formatDate
(
new
Date
(),
"E"
);
}
/**
* 将日期型字符串转换为日期格式.
* 支持的日期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"
* @param str
* @return Date
* @since 1.0
*/
public
static
Date
parseDate
(
Object
str
)
{
if
(
str
==
null
)
{
return
null
;
}
try
{
return
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
parseDate
(
str
.
toString
(),
parsePatterns
);
}
catch
(
ParseException
e
)
{
return
null
;
}
}
/**
* 获取当前日期与指定日期相隔的天数.
* @param date 给定的日期
* @return long 日期间隔天数,正数表示给定日期在当前日期之前,负数表示在当前日期之后
* @since 1.0
*/
public
static
long
pastDays
(
Date
date
)
{
// 将指定日期转换为yyyy-MM-dd格式
date
=
DateUtils
.
parseDate
(
DateUtils
.
formatDate
(
date
,
DateUtils
.
DATE_FORMAT
));
// 当前日期转换为yyyy-MM-dd格式
Date
currentDate
=
DateUtils
.
parseDate
(
DateUtils
.
formatDate
(
new
Date
(),
DateUtils
.
DATE_FORMAT
));
long
t
=
0
;
if
(
date
!=
null
&&
currentDate
!=
null
){
t
=
(
currentDate
.
getTime
()
-
date
.
getTime
())
/
DateUtils
.
MILLISECONDS_PER_DAY
;
}
return
t
;
}
/**
* 获取当前日期指定天数之后的日期.
* @param num 相隔天数
* @return Date 日期
* @since 1.0
*/
public
static
Date
nextDay
(
int
num
)
{
Calendar
curr
=
Calendar
.
getInstance
();
curr
.
set
(
Calendar
.
DAY_OF_MONTH
,
curr
.
get
(
Calendar
.
DAY_OF_MONTH
)
+
num
);
return
curr
.
getTime
();
}
/**
* 获取当前日期指定月数之后的日期.
* @param num 间隔月数
* @return Date 日期
* @since 1.0
*/
public
static
Date
nextMonth
(
int
num
)
{
Calendar
curr
=
Calendar
.
getInstance
();
curr
.
set
(
Calendar
.
MONTH
,
curr
.
get
(
Calendar
.
MONTH
)
+
num
);
return
curr
.
getTime
();
}
/**
* 获取当前日期指定年数之后的日期.
* @param num 间隔年数
* @return Date 日期
* @since 1.0
*/
public
static
Date
nextYear
(
int
num
)
{
Calendar
curr
=
Calendar
.
getInstance
();
curr
.
set
(
Calendar
.
YEAR
,
curr
.
get
(
Calendar
.
YEAR
)
+
num
);
return
curr
.
getTime
();
}
/**
* 将 Date 日期转化为 Calendar 类型日期.
* @param date 给定的时间,若为null,则默认为当前时间
* @return Calendar Calendar对象
* @since 1.0
*/
public
static
Calendar
getCalendar
(
Date
date
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
// calendar.setFirstDayOfWeek(Calendar.SUNDAY);//每周从周日开始
// calendar.setMinimalDaysInFirstWeek(1); // 设置每周最少为1天
if
(
date
!=
null
)
{
calendar
.
setTime
(
date
);
}
return
calendar
;
}
/**
* 计算两个日期之间相差天数.
* @param start 计算开始日期
* @param end 计算结束日期
* @return long 相隔天数
* @since 1.0
*/
public
static
long
getDaysBetween
(
Date
start
,
Date
end
)
{
// 将指定日期转换为yyyy-MM-dd格式
start
=
DateUtils
.
parseDate
(
DateUtils
.
formatDate
(
start
,
DateUtils
.
DATE_FORMAT
));
// 当前日期转换为yyyy-MM-dd格式
end
=
DateUtils
.
parseDate
(
DateUtils
.
formatDate
(
end
,
DateUtils
.
DATE_FORMAT
));
long
diff
=
0
;
if
(
start
!=
null
&&
end
!=
null
)
{
diff
=
(
end
.
getTime
()
-
start
.
getTime
())
/
DateUtils
.
MILLISECONDS_PER_DAY
;
}
return
diff
;
}
/**
* 计算两个日期之前相隔多少周.
* @param start 计算开始时间
* @param end 计算结束时间
* @return long 相隔周数,向下取整
* @since 1.0
*/
public
static
long
getWeeksBetween
(
Date
start
,
Date
end
)
{
return
getDaysBetween
(
start
,
end
)
/
DateUtils
.
DAYS_PER_WEEK
;
}
/**
* 获取与指定日期间隔给定天数的日期.
* @param specifiedDay 给定的字符串格式日期,支持的日期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss",
* "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss",
* "yyyy/MM/dd HH:mm"
* @param num 间隔天数
* @return String 间隔指定天数之后的日期
* @since 1.0
*/
public
static
String
getSpecifiedDayAfter
(
String
specifiedDay
,
int
num
)
{
Date
specifiedDate
=
parseDate
(
specifiedDay
);
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
specifiedDate
);
int
day
=
c
.
get
(
Calendar
.
DATE
);
c
.
set
(
Calendar
.
DATE
,
day
+
num
);
String
dayAfter
=
formatDate
(
c
.
getTime
(),
DateUtils
.
DATE_FORMAT
);
return
dayAfter
;
}
/**
* 计算两个日期之前间隔的小时数.
*
* @param date1
* 结束时间
* @param date2
* 开始时间
* @return String 相差的小时数,保留一位小数
* @since 1.0
*/
public
static
String
dateMinus
(
Date
date1
,
Date
date2
)
{
if
(
date1
==
null
||
date2
==
null
)
{
return
"0"
;
}
Long
r
=
date1
.
getTime
()
-
date2
.
getTime
();
DecimalFormat
df
=
new
DecimalFormat
(
"#.0"
);
double
result
=
r
*
1.0
/
DateUtils
.
MILLISECONDS_PER_HOUR
;
return
df
.
format
(
result
);
}
/**
* 获取当前季度 .
*
* @return Integer 当前季度数
* @since 1.0
*/
public
static
Integer
getCurrentSeason
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
Integer
month
=
calendar
.
get
(
Calendar
.
MONTH
)
+
1
;
int
season
=
0
;
if
(
month
>=
1
&&
month
<=
3
)
{
season
=
1
;
}
else
if
(
month
>=
4
&&
month
<=
6
)
{
season
=
2
;
}
else
if
(
month
>=
7
&&
month
<=
9
)
{
season
=
3
;
}
else
if
(
month
>=
10
&&
month
<=
12
)
{
season
=
4
;
}
return
season
;
}
/**
* 将以秒为单位的时间转换为其他单位.
*
* @param seconds
* 秒数
* @return String 例如 16分钟前、2小时前、3天前、4月前、5年前等
* @since 1.0
*/
public
static
String
getIntervalBySeconds
(
long
seconds
)
{
StringBuffer
buffer
=
new
StringBuffer
();
if
(
seconds
<
SECONDS_PER_MINUTE
)
{
buffer
.
append
(
seconds
).
append
(
"秒前"
);
}
else
if
(
seconds
<
SECONDS_PER_HOUR
)
{
buffer
.
append
(
seconds
/
SECONDS_PER_MINUTE
).
append
(
"分钟前"
);
}
else
if
(
seconds
<
SECONDS_PER_DAY
)
{
buffer
.
append
(
seconds
/
SECONDS_PER_HOUR
).
append
(
"小时前"
);
}
else
if
(
seconds
<
SECONDS_PER_MONTH
)
{
buffer
.
append
(
seconds
/
SECONDS_PER_DAY
).
append
(
"天前"
);
}
else
if
(
seconds
<
SECONDS_PER_YEAR
)
{
buffer
.
append
(
seconds
/
SECONDS_PER_MONTH
).
append
(
"月前"
);
}
else
{
buffer
.
append
(
seconds
/
DateUtils
.
SECONDS_PER_YEAR
).
append
(
"年前"
);
}
return
buffer
.
toString
();
}
/**
*
* getNowTimeBefore(记录时间相当于目前多久之前)
*
* @param seconds
* 秒
* @return
* @exception @since
* 1.0
* @author rlliu
*/
public
static
String
getNowTimeBefore
(
long
seconds
)
{
StringBuffer
buffer
=
new
StringBuffer
();
buffer
.
append
(
"上传于"
);
if
(
seconds
<
3600
)
{
buffer
.
append
((
long
)
Math
.
floor
(
seconds
/
60.0
)).
append
(
"分钟前"
);
}
else
if
(
seconds
<
86400
)
{
buffer
.
append
((
long
)
Math
.
floor
(
seconds
/
3600.0
)).
append
(
"小时前"
);
}
else
if
(
seconds
<
604800
)
{
buffer
.
append
((
long
)
Math
.
floor
(
seconds
/
86400.0
)).
append
(
"天前"
);
}
else
if
(
seconds
<
2592000
)
{
buffer
.
append
((
long
)
Math
.
floor
(
seconds
/
604800.0
)).
append
(
"周前"
);
}
else
if
(
seconds
<
31104000
)
{
buffer
.
append
((
long
)
Math
.
floor
(
seconds
/
2592000.0
)).
append
(
"月前"
);
}
else
{
buffer
.
append
((
long
)
Math
.
floor
(
seconds
/
31104000.0
)).
append
(
"年前"
);
}
return
buffer
.
toString
();
}
/**
*
* getMonthsBetween(查询两个日期相隔的月份)
*
* @param startDate 开始日期1 (格式yyyy-MM-dd)
* @param endDate 截止日期2 (格式yyyy-MM-dd)
* @return
*/
public
static
int
getMonthsBetween
(
String
startDate
,
String
endDate
)
{
Calendar
c1
=
Calendar
.
getInstance
();
Calendar
c2
=
Calendar
.
getInstance
();
c1
.
setTime
(
DateUtils
.
parseDate
(
startDate
));
c2
.
setTime
(
DateUtils
.
parseDate
(
endDate
));
int
year
=
c2
.
get
(
Calendar
.
YEAR
)
-
c1
.
get
(
Calendar
.
YEAR
);
int
month
=
c2
.
get
(
Calendar
.
MONTH
)
-
c1
.
get
(
Calendar
.
MONTH
);
return
Math
.
abs
(
year
*
12
+
month
);
}
/**
*
* getDayOfWeek(获取当前日期是星期几)
*
* @param dateStr 日期
* @return 星期几
*/
public
static
String
getDayOfWeek
(
String
dateStr
)
{
String
[]
weekOfDays
=
{
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
};
Date
date
=
parseDate
(
dateStr
);
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
int
num
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
return
weekOfDays
[
num
];
}
/**
* sns 格式 如几秒前,几分钟前,几小时前,几天前,几个月前,几年后, ... 精细,类如某个明星几秒钟之前发表了一篇微博
*
* @param createTime
* @return
*/
public
static
String
snsFormat
(
long
createTime
)
{
long
now
=
System
.
currentTimeMillis
()
/
1000
;
long
differ
=
now
-
createTime
/
1000
;
String
dateStr
=
""
;
if
(
differ
<=
60
)
{
dateStr
=
"刚刚"
;
}
else
if
(
differ
<=
3600
)
{
dateStr
=
(
differ
/
60
)
+
"分钟前"
;
}
else
if
(
differ
<=
3600
*
24
)
{
dateStr
=
(
differ
/
3600
)
+
"小时前"
;
}
else
if
(
differ
<=
3600
*
24
*
30
)
{
dateStr
=
(
differ
/
(
3600
*
24
))
+
"天前"
;
}
else
{
Date
date
=
new
Date
(
createTime
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
dateStr
=
sdf
.
format
(
date
);
}
return
dateStr
;
}
/**
* 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"
* 如果获取失败,返回null
* @return
*/
public
static
String
getUTCTimeStr
()
{
StringBuffer
UTCTimeBuffer
=
new
StringBuffer
();
// 1、取得本地时间:
Calendar
cal
=
Calendar
.
getInstance
()
;
// 2、取得时间偏移量:
int
zoneOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
ZONE_OFFSET
);
// 3、取得夏令时差:
int
dstOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
DST_OFFSET
);
// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
cal
.
add
(
java
.
util
.
Calendar
.
MILLISECOND
,
-(
zoneOffset
+
dstOffset
));
int
year
=
cal
.
get
(
Calendar
.
YEAR
);
int
month
=
cal
.
get
(
Calendar
.
MONTH
)+
1
;
int
day
=
cal
.
get
(
Calendar
.
DAY_OF_MONTH
);
int
hour
=
cal
.
get
(
Calendar
.
HOUR_OF_DAY
);
int
minute
=
cal
.
get
(
Calendar
.
MINUTE
);
UTCTimeBuffer
.
append
(
year
).
append
(
"-"
).
append
(
month
).
append
(
"-"
).
append
(
day
)
;
UTCTimeBuffer
.
append
(
" "
).
append
(
hour
).
append
(
":"
).
append
(
minute
)
;
try
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
sdf
.
parse
(
UTCTimeBuffer
.
toString
())
;
return
UTCTimeBuffer
.
toString
()
;
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
()
;
}
return
null
;
}
}
\ No newline at end of file
hs-api/src/main/java/com/hs/api/mapper/Sys
Login
ConfigMapper.java
→
hs-api/src/main/java/com/hs/api/mapper/SysConfigMapper.java
View file @
e085ac44
...
...
@@ -7,6 +7,6 @@ import org.apache.ibatis.annotations.Param;
import
java.util.List
;
import
java.util.Map
;
public
interface
Sys
Login
ConfigMapper
{
public
interface
SysConfigMapper
{
List
<
SysConfig
>
selectByKey
(
String
key
);
}
\ No newline at end of file
hs-api/src/main/java/com/hs/api/model/SysUser.java
View file @
e085ac44
...
...
@@ -29,12 +29,16 @@ public class SysUser {
private
Date
errorTime
;
private
Date
lastUpdatePwdTime
;
private
Date
lastTime
;
private
String
lastIp
;
private
String
macAddress
;
private
boolean
lockFlag
;
public
Long
getId
()
{
return
id
;
}
...
...
@@ -162,4 +166,24 @@ public class SysUser {
public
void
setMacAddress
(
String
macAddress
)
{
this
.
macAddress
=
macAddress
;
}
public
Date
getLastUpdatePwdTime
()
{
return
lastUpdatePwdTime
;
}
public
void
setLastUpdatePwdTime
(
Date
lastUpdatePwdTime
)
{
this
.
lastUpdatePwdTime
=
lastUpdatePwdTime
;
}
public
boolean
isLockFlag
()
{
return
lockFlag
;
}
public
void
setLockFlag
(
boolean
lockFlag
)
{
this
.
lockFlag
=
lockFlag
;
}
public
void
addErrorCount
()
{
this
.
errorCount
=
this
.
errorCount
==
null
?
1
:
this
.
errorCount
+
1
;
}
}
\ No newline at end of file
hs-api/src/main/java/com/hs/api/service/Impl/LoginServiceImpl.java
View file @
e085ac44
package
com
.
hs
.
api
.
service
.
Impl
;
import
com.hs.api.common.enums.SysConfigKeyType
;
import
com.hs.api.common.exceptions.DBConfigurationError
;
import
com.hs.api.common.utils.DateUtils
;
import
com.hs.api.common.utils.TokenUtil
;
import
com.hs.api.mapper.DicOrgMapper
;
import
com.hs.api.mapper.SysRoleMapper
;
...
...
@@ -9,7 +11,9 @@ import com.hs.api.mapper.SysVersionMapper;
import
com.hs.api.model.*
;
import
com.hs.api.model.respmodel.LoginInfo
;
import
com.hs.api.service.LoginService
;
import
com.hs.api.service.SysConfigService
;
import
com.hs.api.service.UserService
;
import
com.hs.common.utils.RedisUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -24,6 +28,9 @@ public class LoginServiceImpl implements LoginService {
@Autowired
private
UserService
userServiceImpl
;
@Autowired
private
SysConfigService
sysConfigService
;
@Resource
private
SysUserMapper
sysUserMapper
;
@Resource
...
...
@@ -39,6 +46,14 @@ public class LoginServiceImpl implements LoginService {
LoginInfo
loginInfo
=
new
LoginInfo
();
SysUser
user
=
userServiceImpl
.
findByLoginName
(
logName
);
//判断是否被锁定
if
(
user
.
isLockFlag
())
throw
new
DBConfigurationError
(
"该账号已被锁定请联系管理员解锁!"
);
//判断是否很久没有更改密码
if
(
sysConfigService
.
getSysConfigStateByKey
(
SysConfigKeyType
.
PWD_TIME_LIMIT
.
getCode
())
&&
DateUtils
.
getDaysBetween
(
user
.
getLastUpdatePwdTime
(),
new
Date
())
>
90
)
throw
new
DBConfigurationError
(
"您已经超过90天没有更换密码,请修改密码后再登录!"
);
if
(
user
!=
null
&&
user
.
getPassword
().
equals
(
password
)
&&
(
user
.
getMacAddress
()
==
null
||
user
.
getMacAddress
().
equals
(
macAddrss
)))
{
String
token
=
TokenUtil
.
getToken
(
password
,
user
);
//修改ip以及最后登录时间、MAC地址
...
...
@@ -64,17 +79,34 @@ public class LoginServiceImpl implements LoginService {
//查询病案信息
SysVersion
version
=
sysVersionMapper
.
selectLastDate
();
loginInfo
.
setVersion
(
version
);
RedisUtil
.
del
(
user
.
getUserCode
());
}
else
{
throw
new
DBConfigurationError
(
"账号、密码或者MAC地址错误!"
);
if
(
user
!=
null
)
checkErrorCount
(
user
);
throw
new
DBConfigurationError
(
"登录失败请检查用户名和密码!"
);
}
return
loginInfo
;
}
private
void
checkErrorCount
(
SysUser
user
)
{
String
userCode
=
user
.
getUserCode
();
if
(
RedisUtil
.
hasKey
(
userCode
)
&&
Integer
.
parseInt
(
RedisUtil
.
get
(
userCode
).
toString
())>=
5
)
{
user
.
setLockFlag
(
true
);
sysUserMapper
.
updateByPrimaryKey
(
user
);
return
;
}
if
(!
RedisUtil
.
hasKey
(
userCode
))
{
RedisUtil
.
set
(
userCode
,
1
,
5
*
60
);
}
else
{
RedisUtil
.
incr
(
userCode
,
1
);
}
}
public
boolean
updatePass
(
String
logName
,
String
oldPassword
,
String
newPassword
)
{
int
result
=
0
;
SysUser
user
=
userServiceImpl
.
findByLoginName
(
logName
);
if
(
user
!=
null
&&
user
.
getPassword
().
equals
(
oldPassword
))
{
user
.
setPassword
(
newPassword
);
user
.
setLastUpdatePwdTime
(
new
Date
());
result
=
sysUserMapper
.
updateByPrimaryKey
(
user
);
}
else
{
throw
new
DBConfigurationError
(
"旧密码错误!"
);
...
...
hs-api/src/main/java/com/hs/api/service/Impl/SysConfigServiceImpl.java
View file @
e085ac44
package
com
.
hs
.
api
.
service
.
Impl
;
import
com.hs.api.common.enums.DimType
;
import
com.hs.api.mapper.DicDimMapper
;
import
com.hs.api.mapper.SerDimValueMapper
;
import
com.hs.api.mapper.SerPageBlockRsMapper
;
import
com.hs.api.mapper.SysLoginConfigMapper
;
import
com.hs.api.model.DicDim
;
import
com.hs.api.model.SerDimValue
;
import
com.hs.api.mapper.SysConfigMapper
;
import
com.hs.api.model.SysConfig
;
import
com.hs.api.model.respmodel.DimValue
;
import
com.hs.api.service.DicDimService
;
import
com.hs.api.service.SysConfigService
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
@Service
public
class
SysConfigServiceImpl
implements
SysConfigService
{
@Resource
private
Sys
LoginConfigMapper
sysLogin
ConfigMapper
;
private
Sys
ConfigMapper
sys
ConfigMapper
;
@Override
public
boolean
getSysConfigStateByKey
(
String
key
)
{
List
<
SysConfig
>
sysConfigList
=
sysLoginConfigMapper
.
selectByKey
(
key
);
List
<
SysConfig
>
sysConfigList
=
sysConfigMapper
.
selectByKey
(
key
);
if
(
sysConfigList
.
size
()==
0
)
return
false
;
SysConfig
sysConfig
=
sysConfigList
.
get
(
0
);
return
sysConfig
.
getState
();
}
@Override
public
String
getSysConfigValueSByKey
(
String
key
)
{
List
<
SysConfig
>
sysConfigList
=
sysConfigMapper
.
selectByKey
(
key
);
if
(
sysConfigList
.
size
()==
0
)
return
null
;
SysConfig
sysConfig
=
sysConfigList
.
get
(
0
);
return
sysConfig
.
getValue
();
}
}
hs-api/src/main/java/com/hs/api/service/SysConfigService.java
View file @
e085ac44
...
...
@@ -6,4 +6,6 @@ import java.util.List;
public
interface
SysConfigService
{
boolean
getSysConfigStateByKey
(
String
key
);
String
getSysConfigValueSByKey
(
String
key
);
}
hs-api/src/main/resources/mapper/Sys
Login
ConfigMapper.xml
→
hs-api/src/main/resources/mapper/SysConfigMapper.xml
View file @
e085ac44
<?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.hs.api.mapper.Sys
Login
ConfigMapper"
>
<mapper
namespace=
"com.hs.api.mapper.SysConfigMapper"
>
<resultMap
id=
"ResultMap"
type=
"com.hs.api.model.SysConfig"
>
<id
column=
"ID"
jdbcType=
"DECIMAL"
property=
"id"
/>
<result
column=
"CREATE_DATE"
jdbcType=
"TIMESTAMP"
property=
"createDate"
/>
...
...
hs-api/src/main/resources/mapper/SysUserMapper.xml
View file @
e085ac44
...
...
@@ -18,6 +18,8 @@
<result
column=
"LAST_TIME"
jdbcType=
"TIMESTAMP"
property=
"lastTime"
/>
<result
column=
"LAST_IP"
jdbcType=
"VARCHAR"
property=
"lastIp"
/>
<result
column=
"MAC_ADDRESS"
jdbcType=
"VARCHAR"
property=
"macAddress"
/>
<result
column=
"LAST_UPDATE_PWD_TIME"
jdbcType=
"TIMESTAMP"
property=
"lastUpdatePwdTime"
/>
<result
column=
"LOCK_FLAG"
jdbcType=
"BOOLEAN"
property=
"lockFlag"
/>
</resultMap>
<delete
id=
"deleteByPrimaryKey"
parameterType=
"java.lang.Long"
>
delete
...
...
@@ -55,7 +57,9 @@
ERROR_TIME = #{errorTime,jdbcType=TIMESTAMP},
LAST_TIME = #{lastTime,jdbcType=TIMESTAMP},
LAST_IP = #{lastIp,jdbcType=VARCHAR},
MAC_ADDRESS = #{macAddress,jdbcType=VARCHAR}
MAC_ADDRESS = #{macAddress,jdbcType=VARCHAR},
LAST_UPDATE_PWD_TIME = #{lastUpdatePwdTime,jdbcType=VARCHAR},
LOCK_FLAG = #{lockFlag,jdbcType=VARCHAR}
where ID = #{id,jdbcType=DECIMAL}
</update>
<select
id=
"selectByPrimaryKey"
parameterType=
"java.lang.Long"
resultMap=
"BaseResultMap"
>
...
...
@@ -113,7 +117,9 @@
ERROR_TIME,
LAST_TIME,
LAST_IP,
MAC_ADDRESS
MAC_ADDRESS,
LAST_UPDATE_PWD_TIME,
LOCK_FLAG
from SYS_USER
where USER_CODE = #{userCode,jdbcType=VARCHAR}
and `STATE` != 0
...
...
Write
Preview
Markdown
is supported
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