Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cash-loan-flow-boss
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QG
cash-loan-flow-boss
Commits
4c43fb75
Commit
4c43fb75
authored
Oct 28, 2019
by
suntao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
login and out
parent
1cc273a6
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
116 additions
and
10 deletions
+116
-10
LogController.java
.../cashloanflowboss/api/login/controller/LogController.java
+4
-4
LoginService.java
...roup/cashloanflowboss/api/login/service/LoginService.java
+17
-0
LoginServiceImpl.java
.../cashloanflowboss/api/login/service/LoginServiceImpl.java
+19
-1
Application.java
...java/cn/quantgroup/cashloanflowboss/core/Application.java
+18
-1
Assert.java
...a/cn/quantgroup/cashloanflowboss/core/asserts/Assert.java
+42
-0
ApplicationSecurityHandler.java
...owboss/core/configuration/ApplicationSecurityHandler.java
+11
-4
ApplicationDictionary.java
...shloanflowboss/core/dictionary/ApplicationDictionary.java
+3
-0
ApplicationStatus.java
...p/cashloanflowboss/core/dictionary/ApplicationStatus.java
+2
-0
No files found.
src/main/java/cn/quantgroup/cashloanflowboss/api/login/controller/LogController.java
View file @
4c43fb75
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
login
.
controller
;
import
cn.quantgroup.cashloanflowboss.api.login.model.LoginFormModel
;
import
cn.quantgroup.cashloanflowboss.api.login.service.LogService
;
import
cn.quantgroup.cashloanflowboss.api.login.service.Log
in
Service
;
import
cn.quantgroup.cashloanflowboss.component.security.Authority
;
import
cn.quantgroup.cashloanflowboss.component.security.annotiation.Security
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
...
...
@@ -21,7 +21,7 @@ import javax.validation.Valid;
public
class
LogController
{
@Autowired
private
Log
Service
log
Service
;
private
Log
inService
login
Service
;
/**
* 登入
...
...
@@ -31,7 +31,7 @@ public class LogController {
*/
@PostMapping
(
"/login"
)
public
Result
<
String
>
login
(
@RequestBody
@Valid
LoginFormModel
loginFormModel
)
{
return
new
Result
<>(
ApplicationStatus
.
SUCCESS
,
this
.
logService
.
login
(
loginFormModel
.
getUsername
(),
loginFormModel
.
getPassword
()));
return
new
Result
<>(
ApplicationStatus
.
SUCCESS
,
this
.
log
in
Service
.
login
(
loginFormModel
.
getUsername
(),
loginFormModel
.
getPassword
()));
}
/**
...
...
@@ -42,7 +42,7 @@ public class LogController {
@DeleteMapping
(
"/logout"
)
@Security
(
authorityId
=
"Log.logout"
,
authorities
=
Authority
.
READ
)
public
Result
<
Boolean
>
logout
()
{
return
new
Result
<>(
ApplicationStatus
.
SUCCESS
,
this
.
logService
.
logout
());
return
new
Result
<>(
ApplicationStatus
.
SUCCESS
,
this
.
log
in
Service
.
logout
());
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/login/service/LoginService.java
0 → 100644
View file @
4c43fb75
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
login
.
service
;
import
java.util.Map
;
/**
* function:
* date: 2019/10/28
*
* @author: suntao
*/
public
interface
LoginService
{
String
login
(
String
username
,
String
password
);
boolean
logout
();
Map
<
String
,
Object
>
getConcurrentHashMapLoginInfo
();
}
src/main/java/cn/quantgroup/cashloanflowboss/api/login/service/Log
Service
.java
→
src/main/java/cn/quantgroup/cashloanflowboss/api/login/service/Log
inServiceImpl
.java
View file @
4c43fb75
...
...
@@ -16,13 +16,16 @@ import org.springframework.stereotype.Service;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpSession
;
import
java.util.Date
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* Created by WeiWei on 2019/7/22.
*/
@Slf4j
@Service
public
class
LogService
{
public
class
Log
inServiceImpl
implements
Login
Service
{
@Autowired
private
UserServiceImpl
userService
;
...
...
@@ -30,6 +33,11 @@ public class LogService {
@Autowired
private
HttpServletRequest
request
;
/**
* 用户为key,登陆信息(最后登陆时间)
*/
private
ConcurrentHashMap
<
String
,
Object
>
loginInfo
=
new
ConcurrentHashMap
<>(
8
);
/**
* 登入
*
...
...
@@ -37,6 +45,7 @@ public class LogService {
* @param password 密码(明文)
* @return
*/
@Override
public
String
login
(
String
username
,
String
password
)
{
User
user
=
this
.
userService
.
getUser
(
username
);
...
...
@@ -66,6 +75,9 @@ public class LogService {
principal
.
setRoles
(
user
.
getRoles
());
session
.
setAttribute
(
ApplicationDictionary
.
PRINCIPAL
,
JSONTools
.
serialize
(
principal
));
// session登陆时间,毫秒值
// 用户登陆时间,毫秒值
loginInfo
.
put
(
userInfo
.
getUserId
()
+
""
,
session
.
getLastAccessedTime
());
return
session
.
getId
();
...
...
@@ -76,6 +88,7 @@ public class LogService {
*
* @return
*/
@Override
public
boolean
logout
()
{
this
.
request
.
getSession
().
removeAttribute
(
ApplicationDictionary
.
PRINCIPAL
);
...
...
@@ -84,4 +97,9 @@ public class LogService {
}
@Override
public
Map
<
String
,
Object
>
getConcurrentHashMapLoginInfo
()
{
return
loginInfo
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/core/Application.java
View file @
4c43fb75
...
...
@@ -15,9 +15,11 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import
javax.servlet.ServletContext
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpSession
;
import
javax.validation.Validation
;
import
javax.validation.Validator
;
import
java.util.Objects
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* Created by WeiWei on 2017/5/23.
...
...
@@ -29,6 +31,11 @@ public class Application implements ApplicationContextAware, ServletContextAware
private
static
ServletContext
servletContext
;
/**
* 用户为key,登陆信息(最后登陆时间)
*/
private
ConcurrentHashMap
<
String
,
Object
>
loginInfo
;
public
static
ApplicationContext
getApplicationContext
()
{
return
applicationContext
;
...
...
@@ -164,9 +171,19 @@ public class Application implements ApplicationContextAware, ServletContextAware
*/
public
static
Principal
getPrincipal
()
{
return
Objects
.
nonNull
(
getSession
())
?
JSONTools
.
deserialize
(
String
.
valueOf
(
getSession
().
getAttribute
(
ApplicationDictionary
.
PRINCIPAL
)),
Principal
.
class
)
:
null
;
}
/**
* 获取用户主要信息
*
* @return
*/
public
static
HttpSession
getSession
()
{
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
return
Objects
.
nonNull
(
request
)
&&
Objects
.
nonNull
(
request
.
getSession
())
?
JSONTools
.
deserialize
(
String
.
valueOf
(
request
.
getSession
().
getAttribute
(
ApplicationDictionary
.
PRINCIPAL
)),
Principal
.
class
)
:
null
;
return
Objects
.
nonNull
(
request
)
&&
Objects
.
nonNull
(
request
.
getSession
())
?
request
.
getSession
(
)
:
null
;
}
...
...
src/main/java/cn/quantgroup/cashloanflowboss/core/asserts/Assert.java
View file @
4c43fb75
package
cn
.
quantgroup
.
cashloanflowboss
.
core
.
asserts
;
import
cn.quantgroup.cashloanflowboss.api.login.model.Principal
;
import
cn.quantgroup.cashloanflowboss.core.Application
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.Status
;
import
cn.quantgroup.cashloanflowboss.core.exception.ApplicationException
;
import
org.apache.commons.lang3.ObjectUtils
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpSession
;
import
java.util.Collection
;
import
java.util.Map
;
import
java.util.Objects
;
/**
...
...
@@ -313,4 +321,38 @@ public class Assert {
}
}
/**
* @param concurrentHashMapLoginInfo 账号最后登陆时间
* @param authenticationLoginCrowdOut
*/
public
static
void
isLastLogin
(
Map
<
String
,
Object
>
concurrentHashMapLoginInfo
,
Status
authenticationLoginCrowdOut
)
{
HttpSession
session
=
Application
.
getSession
();
if
(
Objects
.
isNull
(
session
))
{
System
.
out
.
println
(
"session 为空"
);
return
;
}
Principal
principal
=
Application
.
getPrincipal
();
if
(
Objects
.
isNull
(
principal
))
{
System
.
out
.
println
(
"principal 为空"
);
return
;
}
Object
userLastLoginTimeObject
=
concurrentHashMapLoginInfo
.
get
(
principal
.
getUserInfo
().
getUserId
()+
""
);
if
(
Objects
.
isNull
(
userLastLoginTimeObject
))
{
// 没有登陆时间 不处理
System
.
out
.
println
(
"userLastLoginTimeObject 为空"
);
return
;
}
// 获取session最后登陆时间
Long
lastAccessedTime
=
session
.
getLastAccessedTime
();
if
(
Objects
.
isNull
(
lastAccessedTime
))
{
System
.
out
.
println
(
"lastAccessedTime 为空"
);
return
;
}
if
(
lastAccessedTime
<
Long
.
valueOf
(
userLastLoginTimeObject
.
toString
()))
{
throw
new
ApplicationException
(
authenticationLoginCrowdOut
);
}
}
}
src/main/java/cn/quantgroup/cashloanflowboss/core/configuration/ApplicationSecurityHandler.java
View file @
4c43fb75
package
cn
.
quantgroup
.
cashloanflowboss
.
core
.
configuration
;
import
cn.quantgroup.cashloanflowboss.api.login.model.Principal
;
import
cn.quantgroup.cashloanflowboss.api.login.service.LoginService
;
import
cn.quantgroup.cashloanflowboss.api.login.service.LoginServiceImpl
;
import
cn.quantgroup.cashloanflowboss.api.role.entity.Role
;
import
cn.quantgroup.cashloanflowboss.component.security.Authority
;
import
cn.quantgroup.cashloanflowboss.component.security.SecurityHandler
;
import
cn.quantgroup.cashloanflowboss.core.Application
;
import
cn.quantgroup.cashloanflowboss.core.asserts.Assert
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus
;
import
cn.quantgroup.cashloanflowboss.utils.JSONTools
;
import
org.aopalliance.intercept.MethodInvocation
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Configuration
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Stream
;
/**
* Created by WeiWei on 2019/7/26.
...
...
@@ -23,6 +24,9 @@ import java.util.stream.Stream;
@Configuration
public
class
ApplicationSecurityHandler
implements
SecurityHandler
{
@Autowired
private
LoginService
loginService
;
@Override
public
boolean
doAuthentication
(
MethodInvocation
invocation
,
String
authorityId
,
Authority
[]
authority
)
throws
Throwable
{
...
...
@@ -31,8 +35,11 @@ public class ApplicationSecurityHandler implements SecurityHandler {
// 检查是否已登录
Assert
.
isNull
(
principal
,
ApplicationStatus
.
AUTHENTICATION_LOGIN
);
// 如果是超级管理员跳过权限验证
// 是否 被挤下线
Assert
.
isLastLogin
(
loginService
.
getConcurrentHashMapLoginInfo
(),
ApplicationStatus
.
AUTHENTICATION_LOGIN_CROWD_OUT
);
// 如果是超级管理员跳过权限验证
return
principal
.
isSuperAdministrator
()
||
principal
.
getRoles
().
stream
().
anyMatch
(
role
->
{
List
<
Role
>
roleList
=
getRoleAndParent
(
role
);
if
(
CollectionUtils
.
isEmpty
(
roleList
))
{
...
...
src/main/java/cn/quantgroup/cashloanflowboss/core/dictionary/ApplicationDictionary.java
View file @
4c43fb75
...
...
@@ -15,4 +15,7 @@ public final class ApplicationDictionary {
// user Session key
public
static
final
String
USER_KEY
=
"USER"
;
// user Session登陆时间 key
public
static
final
String
USER_SESSION_LOGIN_TIME
=
"USER_SESSION_LOGIN_TIME"
;
}
src/main/java/cn/quantgroup/cashloanflowboss/core/dictionary/ApplicationStatus.java
View file @
4c43fb75
...
...
@@ -27,6 +27,8 @@ public enum ApplicationStatus implements Status<ApplicationStatus> {
AUTHENTICATION_LOGIN
(
500006
,
"请登录..."
),
AUTHENTICATION_LOGIN_CROWD_OUT
(
500007
,
"账号已在其他地方登陆,请重新登录或者修改密码"
),
INVALID_AUTHORITY
(
501001
,
"无效的授权"
),
INVALID_USER
(
501002
,
"无效的用户"
),
...
...
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