Commit d3c6decd authored by suntao's avatar suntao

ldap spring 管理

parent 2ec4b63e
package cn.quantgroup.cashloanflowboss.api.login.service;
public interface IldapAuthentication {
boolean authenricate(String username, String password);
}
package cn.quantgroup.cashloanflowboss.api.login.auth; package cn.quantgroup.cashloanflowboss.api.login.service;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.naming.AuthenticationException; import javax.naming.AuthenticationException;
import javax.naming.Context; import javax.naming.Context;
...@@ -15,22 +18,32 @@ import javax.naming.ldap.LdapContext; ...@@ -15,22 +18,32 @@ import javax.naming.ldap.LdapContext;
import java.util.Hashtable; import java.util.Hashtable;
@Slf4j @Slf4j
public class LDAPAuthentication { @Component
private final String URL = "ldap://ldap.quantgroups.com:389/"; public class LdapAuthentication implements IldapAuthentication, CommandLineRunner {
private final String BASEDN = "ou=北京量科邦信息技术有限公司,dc=quantgroup,dc=cn";
private final String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private LdapContext ctx = null; private LdapContext ctx = null;
private final Control[] connCtls = null; private final Control[] connCtls = null;
@Value("${ldap.base:ou=北京量科邦信息技术有限公司,dc=quantgroup,dc=cn}")
private String BASEDN;
@Value("${ldap.host:ldap://ldap.quantgroups.com:389/}")
private String URL;
@Value("${ldap.manage.pwd}")
private String password;
@Value("${ldap.root:cn=common_auth_query,cn=users,DC=quantgroup,DC=cn}")
private String root;
private void ldapConnect() { private void ldapConnect() {
Hashtable<String, String> env = new Hashtable<String, String>(); Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, FACTORY); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, URL+BASEDN); env.put(Context.PROVIDER_URL, URL+BASEDN);
env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_AUTHENTICATION, "simple");
String root = "cn=common_auth_query,cn=users,DC=quantgroup,DC=cn";// root
env.put(Context.SECURITY_PRINCIPAL, root); env.put(Context.SECURITY_PRINCIPAL, root);
env.put(Context.SECURITY_CREDENTIALS, "Quantgroup.com@2o17"); env.put(Context.SECURITY_CREDENTIALS, password);
// 此处若不指定用户名和密码,则自动转换为匿名登录 // 此处若不指定用户名和密码,则自动转换为匿名登录
try { try {
ctx = new InitialLdapContext(env, connCtls); ctx = new InitialLdapContext(env, connCtls);
...@@ -73,15 +86,16 @@ public class LDAPAuthentication { ...@@ -73,15 +86,16 @@ public class LDAPAuthentication {
return userDN; return userDN;
} }
public boolean authenricate(String uid, String password) { @Override
public boolean authenricate(String username, String password) {
boolean valide = false; boolean valide = false;
String userDN = getUserDN(uid); String userDN = getUserDN(username);
try { try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN); ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password); ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);
ctx.reconnect(connCtls); ctx.reconnect(connCtls);
log.info("验证通过,uid={}", uid); log.info("验证通过,uid={}", username);
valide = true; valide = true;
} catch (AuthenticationException e) { } catch (AuthenticationException e) {
log.error("异常:{}", ExceptionUtils.getStackTrace(e)); log.error("异常:{}", ExceptionUtils.getStackTrace(e));
...@@ -95,4 +109,8 @@ public class LDAPAuthentication { ...@@ -95,4 +109,8 @@ public class LDAPAuthentication {
return valide; return valide;
} }
@Override
public void run(String... strings) throws Exception {
ldapConnect();
}
} }
\ No newline at end of file
package cn.quantgroup.cashloanflowboss.api.login.service; package cn.quantgroup.cashloanflowboss.api.login.service;
import cn.quantgroup.cashloanflowboss.api.login.auth.ApiAuthService; import cn.quantgroup.cashloanflowboss.api.login.auth.ApiAuthService;
import cn.quantgroup.cashloanflowboss.api.login.auth.LDAPAuthentication;
import cn.quantgroup.cashloanflowboss.api.login.auth.model.LoginUser; import cn.quantgroup.cashloanflowboss.api.login.auth.model.LoginUser;
import cn.quantgroup.cashloanflowboss.api.login.model.Principal; import cn.quantgroup.cashloanflowboss.api.login.model.Principal;
import cn.quantgroup.cashloanflowboss.api.role.entity.Role; import cn.quantgroup.cashloanflowboss.api.role.entity.Role;
...@@ -11,15 +10,12 @@ import cn.quantgroup.cashloanflowboss.api.user.dictionary.UserStatus; ...@@ -11,15 +10,12 @@ import cn.quantgroup.cashloanflowboss.api.user.dictionary.UserStatus;
import cn.quantgroup.cashloanflowboss.api.user.entity.User; import cn.quantgroup.cashloanflowboss.api.user.entity.User;
import cn.quantgroup.cashloanflowboss.api.user.model.UserInfo; import cn.quantgroup.cashloanflowboss.api.user.model.UserInfo;
import cn.quantgroup.cashloanflowboss.api.user.service.UserService; import cn.quantgroup.cashloanflowboss.api.user.service.UserService;
import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.base.Tuple; import cn.quantgroup.cashloanflowboss.core.base.Tuple;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationDictionary;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.spi.model.JsonResult;
import cn.quantgroup.cashloanflowboss.utils.IpUtil; import cn.quantgroup.cashloanflowboss.utils.IpUtil;
import cn.quantgroup.cashloanflowboss.utils.MD5Tools; import cn.quantgroup.cashloanflowboss.utils.MD5Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
...@@ -29,7 +25,6 @@ import javax.annotation.Resource; ...@@ -29,7 +25,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.util.Date; import java.util.Date;
import java.util.UUID;
/** /**
* Created by WeiWei on 2019/7/22. * Created by WeiWei on 2019/7/22.
...@@ -50,6 +45,9 @@ public class LoginServiceImpl implements LoginService { ...@@ -50,6 +45,9 @@ public class LoginServiceImpl implements LoginService {
@Autowired @Autowired
private ApiAuthService apiAuthService; private ApiAuthService apiAuthService;
@Autowired
private IldapAuthentication ldapAuthentication;
@Autowired @Autowired
private RoleRepository roleRepository; private RoleRepository roleRepository;
...@@ -81,7 +79,7 @@ public class LoginServiceImpl implements LoginService { ...@@ -81,7 +79,7 @@ public class LoginServiceImpl implements LoginService {
// JsonResult<LoginUser> result = apiAuthService.autoLogin(username + "@quantgroup.cn", password, "KA_MA"); // JsonResult<LoginUser> result = apiAuthService.autoLogin(username + "@quantgroup.cn", password, "KA_MA");
// if (!result.isSuccess() || result.getData() == null) { // if (!result.isSuccess() || result.getData() == null) {
// log.info("登陆失败,username={}, msg={}", username, result.getMessage()); // log.info("登陆失败,username={}, msg={}", username, result.getMessage());
// return new Tuple<>(ApplicationStatus.INVALID_USER, ""); // return new Tuple<>(ApplicationStatus.USERNAME_OR_PASSWORD_ERROR, "");
// } else { // } else {
// LoginUser data = result.getData(); // LoginUser data = result.getData();
// Role role = roleRepository.getByName("量化派操作员"); // Role role = roleRepository.getByName("量化派操作员");
...@@ -95,7 +93,6 @@ public class LoginServiceImpl implements LoginService { ...@@ -95,7 +93,6 @@ public class LoginServiceImpl implements LoginService {
// user.setStatus(UserStatus.ENABLED); // user.setStatus(UserStatus.ENABLED);
// } // }
LDAPAuthentication ldapAuthentication = new LDAPAuthentication();
boolean b = ldapAuthentication.authenricate(username, password); boolean b = ldapAuthentication.authenricate(username, password);
if (b) { if (b) {
LoginUser data = new LoginUser(); LoginUser data = new LoginUser();
...@@ -110,7 +107,7 @@ public class LoginServiceImpl implements LoginService { ...@@ -110,7 +107,7 @@ public class LoginServiceImpl implements LoginService {
user.setStatus(UserStatus.ENABLED); user.setStatus(UserStatus.ENABLED);
} else { } else {
log.info("登陆失败,username={}, msg={}", username, "ldap失败"); log.info("登陆失败,username={}, msg={}", username, "ldap失败");
return new Tuple<>(ApplicationStatus.REENTRY_LOCK_EXCEPTION, ""); return new Tuple<>(ApplicationStatus.USERNAME_OR_PASSWORD_ERROR, "");
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment