Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
holmes
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
holmes
Commits
bba76ede
Commit
bba76ede
authored
May 27, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ldap connect
parent
7dc98afa
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
157 additions
and
0 deletions
+157
-0
LoginController.java
...n/java/cn/qg/holmes/controller/login/LoginController.java
+22
-0
LdapService.java
src/main/java/cn/qg/holmes/service/ldap/LdapService.java
+6
-0
LoginService.java
src/main/java/cn/qg/holmes/service/ldap/LoginService.java
+6
-0
LdapServiceImpl.java
.../java/cn/qg/holmes/service/ldap/impl/LdapServiceImpl.java
+102
-0
LoginServiceImpl.java
...java/cn/qg/holmes/service/ldap/impl/LoginServiceImpl.java
+21
-0
No files found.
src/main/java/cn/qg/holmes/controller/login/LoginController.java
0 → 100644
View file @
bba76ede
package
cn
.
qg
.
holmes
.
controller
.
login
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.service.ldap.LoginService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.CrossOrigin
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@CrossOrigin
@RestController
public
class
LoginController
{
@Autowired
LoginService
loginService
;
@PostMapping
(
"/login"
)
public
JsonResult
login
(
String
username
,
String
password
)
{
return
JsonResult
.
buildSuccessResult
(
loginService
.
login
(
username
,
password
));
}
}
src/main/java/cn/qg/holmes/service/ldap/LdapService.java
0 → 100644
View file @
bba76ede
package
cn
.
qg
.
holmes
.
service
.
ldap
;
public
interface
LdapService
{
boolean
authenticate
(
String
username
,
String
password
);
}
src/main/java/cn/qg/holmes/service/ldap/LoginService.java
0 → 100644
View file @
bba76ede
package
cn
.
qg
.
holmes
.
service
.
ldap
;
public
interface
LoginService
{
String
login
(
String
username
,
String
password
);
}
src/main/java/cn/qg/holmes/service/ldap/impl/LdapServiceImpl.java
0 → 100644
View file @
bba76ede
package
cn
.
qg
.
holmes
.
service
.
ldap
.
impl
;
import
cn.qg.holmes.service.ldap.LdapService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.stereotype.Service
;
import
javax.naming.AuthenticationException
;
import
javax.naming.Context
;
import
javax.naming.NamingEnumeration
;
import
javax.naming.NamingException
;
import
javax.naming.directory.SearchControls
;
import
javax.naming.directory.SearchResult
;
import
javax.naming.ldap.Control
;
import
javax.naming.ldap.InitialLdapContext
;
import
javax.naming.ldap.LdapContext
;
import
java.util.Hashtable
;
@Slf4j
@Service
public
class
LdapServiceImpl
implements
LdapService
,
CommandLineRunner
{
private
LdapContext
ctx
=
null
;
private
final
Control
[]
connCtls
=
null
;
private
final
String
BASEDN
=
"ou=北京量科邦信息技术有限公司,dc=quantgroup,dc=cn"
;
private
final
String
URL
=
"ldap://ldap.quantgroups.com:389/"
;
private
final
String
password
=
"Quantgroup.com@2o17"
;
private
final
String
username
=
"cn=common_auth_query,cn=users,DC=quantgroup,DC=cn"
;
private
void
ldapConnect
()
{
Hashtable
<
String
,
String
>
env
=
new
Hashtable
<>();
env
.
put
(
Context
.
INITIAL_CONTEXT_FACTORY
,
"com.sun.jndi.ldap.LdapCtxFactory"
);
env
.
put
(
Context
.
PROVIDER_URL
,
URL
+
BASEDN
);
env
.
put
(
Context
.
SECURITY_AUTHENTICATION
,
"simple"
);
env
.
put
(
Context
.
SECURITY_PRINCIPAL
,
username
);
env
.
put
(
Context
.
SECURITY_CREDENTIALS
,
password
);
// 此处若不指定用户名和密码,则自动转换为匿名登录
try
{
ctx
=
new
InitialLdapContext
(
env
,
connCtls
);
}
catch
(
Exception
e
)
{
log
.
error
(
"初始化失败:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
}
}
private
String
getUserDN
(
String
username
)
{
String
userDN
=
""
;
ldapConnect
();
try
{
SearchControls
constraints
=
new
SearchControls
();
constraints
.
setSearchScope
(
SearchControls
.
SUBTREE_SCOPE
);
String
email
=
username
.
endsWith
(
"@quantgroup.cn"
)
?
username
:
username
+
"@quantgroup.cn"
;
NamingEnumeration
<
SearchResult
>
en
=
ctx
.
search
(
""
,
"mail="
+
email
,
constraints
);
if
(
en
==
null
||
!
en
.
hasMoreElements
())
{
log
.
info
(
"未找到该用户,uid={}"
,
username
);
}
// maybe more than one element
while
(
en
!=
null
&&
en
.
hasMoreElements
())
{
Object
obj
=
en
.
nextElement
();
if
(
obj
instanceof
SearchResult
)
{
SearchResult
si
=
(
SearchResult
)
obj
;
userDN
+=
si
.
getName
();
userDN
+=
","
+
BASEDN
;
}
else
{
System
.
out
.
println
(
obj
);
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"异常:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
e
.
printStackTrace
();
}
return
userDN
;
}
@Override
public
boolean
authenticate
(
String
username
,
String
password
)
{
boolean
validate
;
String
userDN
=
getUserDN
(
username
);
try
{
ctx
.
addToEnvironment
(
Context
.
SECURITY_PRINCIPAL
,
userDN
);
ctx
.
addToEnvironment
(
Context
.
SECURITY_CREDENTIALS
,
password
);
ctx
.
reconnect
(
connCtls
);
log
.
info
(
"验证通过,uid={}"
,
username
);
validate
=
true
;
}
catch
(
AuthenticationException
e
)
{
log
.
error
(
"异常:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
System
.
out
.
println
(
e
.
toString
());
validate
=
false
;
}
catch
(
NamingException
e
)
{
log
.
error
(
"异常:{}"
,
ExceptionUtils
.
getStackTrace
(
e
));
validate
=
false
;
}
return
validate
;
}
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
ldapConnect
();
}
}
src/main/java/cn/qg/holmes/service/ldap/impl/LoginServiceImpl.java
0 → 100644
View file @
bba76ede
package
cn
.
qg
.
holmes
.
service
.
ldap
.
impl
;
import
cn.qg.holmes.service.ldap.LdapService
;
import
cn.qg.holmes.service.ldap.LoginService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Slf4j
@Service
public
class
LoginServiceImpl
implements
LoginService
{
@Autowired
LdapService
ldapService
;
@Override
public
String
login
(
String
username
,
String
password
)
{
boolean
result
=
ldapService
.
authenticate
(
username
,
password
);
log
.
info
(
"登录结果为:{}"
,
result
);
return
null
;
}
}
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