zouxuan 5 years ago
parent
commit
6d71ac7db9
25 changed files with 424 additions and 261 deletions
  1. 1 1
      codegen/src/main/java/com/yonge/crud/CodegenApplication.java
  2. 16 30
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUserLogin.java
  3. 59 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUserLoginLog.java
  4. 1 6
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/AuthorizationServerConfig.java
  5. 9 13
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebSecurityConfig.java
  6. 3 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java
  7. 0 36
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/WebResponseExceptionTranslator.java
  8. 67 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java
  9. 0 39
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationFailureEvenHandler.java
  10. 54 8
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  11. 3 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  12. 3 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/PhoneUserDetailService.java
  13. 3 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/UsernameUserDetailsService.java
  14. 14 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserLoginDao.java
  15. 8 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserLoginLogDao.java
  16. 0 25
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/UserLoginDao.java
  17. 0 24
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/UserLoginLogDao.java
  18. 0 65
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/model/UserLoginLog.java
  19. 8 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserLoginLogService.java
  20. 14 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserLoginService.java
  21. 21 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserLoginLogServiceImpl.java
  22. 26 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserLoginServiceImpl.java
  23. 43 0
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserLoginLogMapper.xml
  24. 62 0
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserLoginMapper.xml
  25. 9 10
      mec-common/src/main/java/com/ym/mec/common/validcode/impl/SmsCodeServiceImpl.java

+ 1 - 1
codegen/src/main/java/com/yonge/crud/CodegenApplication.java

@@ -28,7 +28,7 @@ public class CodegenApplication {
 		 */
 
 		// "src/generateConfigration.xml"
-		GenerateConfiguration genConfig = toObject("src/main/resources/generateConfigration.xml", GenerateConfiguration.class);
+		GenerateConfiguration genConfig = toObject("codegen/src/main/resources/generateConfigration.xml", GenerateConfiguration.class);
 
 		Configuration config = genConfig.getDbConfiguration();
 

+ 16 - 30
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/model/UserLogin.java → mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUserLogin.java

@@ -1,18 +1,14 @@
-package com.ym.mec.auth.dal.model;
+package com.ym.mec.auth.api.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
- * This file is auto generated by Ant & FreeMarker.
- * DO NOT MODIFY IT.All modified content will be lost when next auto generate. 
- * 这个文件是用ANT和FreeMarker自动生成的。
- * 不要修改此文件。所有改动将在下次重新自动生成时丢失。
- */
-/**
- * 对应数据库表(p2p_user_login):
+ * 对应数据库表(sys_user_login):
  */
-public class UserLogin {
+public class SysUserLogin {
 
 	/**  */
-	private Long userId;
+	private Integer userId;
 	
 	/** 用户登录总次数 */
 	private Integer loginCount;
@@ -31,15 +27,15 @@ public class UserLogin {
 	
 	/** 锁定日期 */
 	private java.util.Date lockDate;
-	
-	public void setUserId(Long userId){
-		this.userId = userId;
+
+	public Integer getUserId() {
+		return userId;
 	}
-	
-	public Long getUserId(){
-		return this.userId;
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
 	}
-			
+
 	public void setLoginCount(Integer loginCount){
 		this.loginCount = loginCount;
 	}
@@ -88,19 +84,9 @@ public class UserLogin {
 		return this.lockDate;
 	}
 			
-	public String toString(){
-		StringBuilder buf = new StringBuilder();
-		buf.append("UserLogin [");
-		buf.append("userId=").append(userId).append(",");
-		buf.append("loginCount=").append(loginCount).append(",");
-		buf.append("lastLoginTime=").append(lastLoginTime).append(",");
-		buf.append("lastLoginIp=").append(lastLoginIp).append(",");
-		buf.append("failCount=").append(failCount).append(",");
-		buf.append("lockTime=").append(lockTime).append(",");
-		buf.append("lockDate=").append(lockDate).append(",");
-		buf.setLength(buf.length()-1);
-		buf.append("]");
-		return buf.toString();
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
 	}
 
 }

+ 59 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUserLoginLog.java

@@ -0,0 +1,59 @@
+package com.ym.mec.auth.api.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(sys_user_login_log):
+ */
+public class SysUserLoginLog {
+
+	/** 会员ID */
+	private Integer userId;
+	
+	/** 登录IP */
+	private String loginIp;
+	
+	/** 登录时间 */
+	private java.util.Date loginTime;
+	
+	/** 终端类型(0,pc端;1,人工;2,移动端;3,自动) */
+	private Integer source;
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public void setLoginIp(String loginIp){
+		this.loginIp = loginIp;
+	}
+	
+	public String getLoginIp(){
+		return this.loginIp;
+	}
+			
+	public void setLoginTime(java.util.Date loginTime){
+		this.loginTime = loginTime;
+	}
+	
+	public java.util.Date getLoginTime(){
+		return this.loginTime;
+	}
+			
+	public void setSource(Integer source){
+		this.source = source;
+	}
+	
+	public Integer getSource(){
+		return this.source;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 1 - 6
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/AuthorizationServerConfig.java

@@ -1,8 +1,6 @@
 package com.ym.mec.auth.config;
 
-import com.ym.mec.auth.core.filter.WebResponseExceptionTranslator;
 import com.ym.mec.common.constant.CommonConstants;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -30,8 +28,6 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
 	private RedisConnectionFactory connectionFactory;
 	@Autowired
 	private AuthenticationManager authenticationManager;
-	@Autowired
-	private WebResponseExceptionTranslator webResponseExceptionTranslator;
 
 	@Autowired
 	private DataSource dataSource;
@@ -41,8 +37,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
 		endpoints
 				.authenticationManager(authenticationManager)
 				.tokenServices(defaultTokenServices())
-				.tokenStore(redisTokenStore())
-				.exceptionTranslator(webResponseExceptionTranslator);
+				.tokenStore(redisTokenStore());
 	}
 
 	@Override

+ 9 - 13
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebSecurityConfig.java

@@ -1,5 +1,13 @@
 package com.ym.mec.auth.config;
 
+import com.ym.mec.auth.core.filter.PhoneLoginAuthenticationFilter;
+import com.ym.mec.auth.core.filter.UsernameAuthenticationFilter;
+import com.ym.mec.auth.core.handler.BaseAuthenticationFailureEvenHandler;
+import com.ym.mec.auth.core.handler.BaseAuthenticationSuccessEventHandler;
+import com.ym.mec.auth.core.provider.PhoneAuthenticationProvider;
+import com.ym.mec.auth.core.provider.service.PhoneUserDetailService;
+import com.ym.mec.auth.core.provider.service.UsernameUserDetailsService;
+import com.ym.mec.common.validcode.SmsCodeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -15,15 +23,6 @@ import org.springframework.security.crypto.factory.PasswordEncoderFactories;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
-import com.ym.mec.auth.core.filter.PhoneLoginAuthenticationFilter;
-import com.ym.mec.auth.core.filter.UsernameAuthenticationFilter;
-import com.ym.mec.auth.core.handler.BaseAuthenticationFailureEvenHandler;
-import com.ym.mec.auth.core.handler.BaseAuthenticationSuccessEventHandler;
-import com.ym.mec.auth.core.provider.PhoneAuthenticationProvider;
-import com.ym.mec.auth.core.provider.service.PhoneUserDetailService;
-import com.ym.mec.auth.core.provider.service.UsernameUserDetailsService;
-import com.ym.mec.common.validcode.SmsCodeService;
-
 @Configuration
 @EnableWebSecurity
 @EnableGlobalMethodSecurity(prePostEnabled = true)
@@ -36,11 +35,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 	private PhoneUserDetailService phoneUserDetailService;
 	
 	@Autowired
-	private PhoneAuthenticationProvider phoneAuthenticationProvider;
-	
-	@Autowired
 	private BaseAuthenticationSuccessEventHandler successEventHandler;
-	
+
 	@Autowired
 	private BaseAuthenticationFailureEvenHandler failureEvenHandler;
 	

+ 3 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/UsernameAuthenticationFilter.java

@@ -6,7 +6,10 @@ import org.springframework.security.authentication.AuthenticationServiceExceptio
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
+import org.springframework.security.web.authentication.AuthenticationFailureHandler;
+import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 import org.springframework.util.Assert;
 

+ 0 - 36
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/filter/WebResponseExceptionTranslator.java

@@ -1,36 +0,0 @@
-package com.ym.mec.auth.core.filter;
-
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.authentication.InternalAuthenticationServiceException;
-import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
-import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
-import org.springframework.security.oauth2.common.exceptions.UnsupportedResponseTypeException;
-import org.springframework.security.oauth2.provider.error.DefaultWebResponseExceptionTranslator;
-import org.springframework.stereotype.Component;
-
-/**
- * 异常转换器
- */
-@Component
-public class WebResponseExceptionTranslator extends DefaultWebResponseExceptionTranslator {
-
-    public static final String BAD_MSG = "Bad credentials";
-
-    /**
-     * @param e spring security内部异常
-     * @return 经过处理的异常信息
-     * @throws Exception 通用异常
-     */
-    @Override
-    public ResponseEntity<OAuth2Exception> translate(Exception e) throws Exception {
-        OAuth2Exception oAuth2Exception;
-        if (e.getLocalizedMessage() != null && e.getLocalizedMessage().equals(BAD_MSG)) {
-            oAuth2Exception = new InvalidGrantException("用户名或密码错误", e);
-        }else if (e instanceof InternalAuthenticationServiceException) {
-            oAuth2Exception = new InvalidGrantException(e.getLocalizedMessage(), e);
-        }   else{
-            oAuth2Exception = new UnsupportedResponseTypeException("服务内部错误", e);
-        }
-        return super.translate(oAuth2Exception);
-    }
-}

+ 67 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/AuthenticationFailureListener.java

@@ -0,0 +1,67 @@
+package com.ym.mec.auth.core.handler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserLogin;
+import com.ym.mec.auth.service.SysUserLoginService;
+import com.ym.mec.auth.service.SysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.HashMap;
+
+@Component
+public class AuthenticationFailureListener implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> {
+    private final static Logger logger = LoggerFactory.getLogger(AuthenticationFailureListener.class);
+
+    @Autowired
+    private SysUserLoginService sysUserLoginService;
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Override
+    public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent authenticationFailureBadCredentialsEvent) {
+        Authentication authentication = authenticationFailureBadCredentialsEvent.getAuthentication();
+        HashMap<String,String> hashMap = objectMapper.convertValue(authentication.getDetails(), HashMap.class);
+        String account = authentication.getPrincipal().toString();
+        SysUser sysUser = sysUserService.queryByUsername(account);
+        Date date = new Date();
+        if(sysUser == null){
+            sysUser = sysUserService.queryByPhone(account);
+        }
+        if(sysUser != null){
+            SysUserLogin userLogin = sysUserLoginService.findLoginByUserId(sysUser.getUserId());
+            if(userLogin == null){
+                userLogin = new SysUserLogin();
+                userLogin.setUserId(sysUser.getUserId());
+                userLogin.setFailCount(1);
+                userLogin.setLastLoginTime(date);
+                userLogin.setLastLoginIp(hashMap.get("remoteAddress"));
+                sysUserLoginService.insert(userLogin);
+            }else {
+                userLogin.setFailCount(userLogin.getFailCount() + 1);
+                userLogin.setLastLoginTime(date);
+                userLogin.setLastLoginIp(hashMap.get("remoteAddress"));
+                if(userLogin.getFailCount() >= 5){
+                    userLogin.setLockTime(30);
+                    userLogin.setLockDate(date);
+                    sysUser.setLockFlag("9");
+                    sysUser.setUpdateTime(date);
+                    sysUserService.update(sysUser);
+                }
+                sysUserLoginService.update(userLogin);
+            }
+            logger.info("用户:{} 登录失败", sysUser.getPhone());
+        }else {
+            logger.info("用户:{} 不存在", account);
+        }
+    }
+}

+ 0 - 39
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationFailureEvenHandler.java

@@ -1,39 +0,0 @@
-package com.ym.mec.auth.core.handler;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ym.mec.common.entity.HttpResponseResult;
-import org.apache.http.HttpStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
-import org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler;
-import org.springframework.stereotype.Component;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-@Component
-public class BaseAuthenticationFailureEvenHandler extends ExceptionMappingAuthenticationFailureHandler {
-
-	@Autowired
-	private ObjectMapper objectMapper;
-
-	private final static Logger logger = LoggerFactory.getLogger(BaseAuthenticationFailureEvenHandler.class);
-
-	@Override
-	public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
-			throws IOException{
-		String message = e.getMessage();
-		Object username = request.getAttribute("SPRING_SECURITY_LAST_USERNAME_KEY");
-		if (e.getLocalizedMessage() != null && e.getLocalizedMessage().equals("Bad credentials")) {
-			message = "用户名或密码错误";
-		}
-		logger.info("用户:{} 登录失败,异常:{}", username, message);
-		HttpResponseResult result = new HttpResponseResult(false, HttpStatus.SC_CONFLICT, null, message);
-		response.setContentType("application/json; charset=utf-8");
-		response.getWriter().write(objectMapper.writeValueAsString(result));
-//		super.onAuthenticationFailure(request, response, authenticationException);
-	}
-}

+ 54 - 8
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -1,26 +1,72 @@
 package com.ym.mec.auth.core.handler;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserLogin;
+import com.ym.mec.auth.api.entity.SysUserLoginLog;
+import com.ym.mec.auth.service.SysUserLoginLogService;
+import com.ym.mec.auth.service.SysUserLoginService;
+import com.ym.mec.auth.service.SysUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.HashMap;
+
 @Component
 public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuthenticationSuccessHandler {
 
+	@Autowired
+	private SysUserLoginService sysUserLoginService;
+	@Autowired
+	private SysUserLoginLogService sysUserLoginLogService;
+	@Autowired
+	private SysUserService sysUserService;
+	@Autowired
+	private ObjectMapper objectMapper;
+
 	private final static Logger logger = LoggerFactory.getLogger(BaseAuthenticationSuccessEventHandler.class);
 
 	@Override
-	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException,
-			IOException {
+	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
 		logger.info("用户:{} 登录成功", authentication.getPrincipal());
+		HashMap<String,String> hashMap = objectMapper.convertValue(authentication.getPrincipal(), HashMap.class);
+		SysUser sysUser = sysUserService.queryByUsername(hashMap.get("username"));
+		if(sysUser == null){
+			sysUser = sysUserService.queryByPhone(hashMap.get("username"));
+		}
+		Date date = new Date();
+		//修改添加登录信息
+		SysUserLogin userLogin = sysUserLoginService.findLoginByUserId(sysUser.getUserId());
+		if(userLogin == null){
+			userLogin = new SysUserLogin();
+			userLogin.setLastLoginIp(request.getRemoteAddr());
+			userLogin.setUserId(sysUser.getUserId());
+			userLogin.setLoginCount(1);
+			sysUserLoginService.insert(setUserLogin(userLogin,date));
+		}else {
+			userLogin.setLastLoginIp(request.getRemoteAddr());
+			userLogin.setLoginCount(userLogin.getLoginCount() + 1);
+			sysUserLoginService.update(setUserLogin(userLogin,date));
+		}
+		//添加登录日志
+		SysUserLoginLog sysUserLoginLog = new SysUserLoginLog();
+		sysUserLoginLog.setLoginTime(date);
+		sysUserLoginLog.setLoginIp(request.getRemoteAddr());
+		sysUserLoginLog.setUserId(sysUser.getUserId());
+		sysUserLoginLogService.insert(sysUserLoginLog);
+	}
+
+	private SysUserLogin setUserLogin(SysUserLogin userLogin,Date date){
+		userLogin.setFailCount(0);
+		userLogin.setLastLoginTime(date);
+		return userLogin;
 	}
 
 }

+ 3 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -1,5 +1,7 @@
 package com.ym.mec.auth.core.provider;
 
+import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
+import com.ym.mec.common.validcode.SmsCodeService;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.InternalAuthenticationServiceException;
 import org.springframework.security.core.Authentication;
@@ -8,9 +10,6 @@ import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 
-import com.ym.mec.auth.config.token.PhoneAuthenticationToken;
-import com.ym.mec.common.validcode.SmsCodeService;
-
 public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider {
 
 	private UserDetailsService userDetailsService;
@@ -43,7 +42,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 		}
 
 		if (loadedUser == null) {
-			throw new InternalAuthenticationServiceException("UserDetailsService returned null, which is an interface contract violation");
+			throw new InternalAuthenticationServiceException("账户不存在");
 		} else {
 			return loadedUser;
 		}

+ 3 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/PhoneUserDetailService.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.service.SysUserService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.LockedException;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.AuthorityUtils;
 import org.springframework.security.core.userdetails.User;
@@ -25,6 +26,8 @@ public class PhoneUserDetailService implements UserDetailsService {
         SysUserInfo userInfo = sysUserService.queryUserInfoByPhone(phone);
         if(userInfo == null){
             return null;
+        }else if(StringUtils.equals(userInfo.getSysUser().getLockFlag(),"9")){
+            throw new LockedException("账户被锁定");
         }
         List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList(userInfo.getPermissions());
 

+ 3 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/UsernameUserDetailsService.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.service.SysUserService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.LockedException;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.AuthorityUtils;
 import org.springframework.security.core.userdetails.User;
@@ -36,6 +37,8 @@ public class UsernameUserDetailsService implements UserDetailsService {
 		SysUserInfo userInfo = sysUserService.queryUserInfoByUsername(username);
 		if(userInfo == null){
 			throw new UsernameNotFoundException("用户不存在");
+		}else if(StringUtils.equals(userInfo.getSysUser().getLockFlag(),"9")){
+			throw new LockedException("账户被锁定");
 		}
 
 		List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList(userInfo.getPermissions());

+ 14 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserLoginDao.java

@@ -0,0 +1,14 @@
+package com.ym.mec.auth.dal.dao;
+
+import com.ym.mec.auth.api.entity.SysUserLogin;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface SysUserLoginDao extends BaseDAO<Long, SysUserLogin> {
+
+    /**
+     * 根据用户查询登录信息
+     * @param userId
+     * @return
+     */
+    SysUserLogin findLoginByUserId(Integer userId);
+}

+ 8 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserLoginLogDao.java

@@ -0,0 +1,8 @@
+package com.ym.mec.auth.dal.dao;
+
+import com.ym.mec.auth.api.entity.SysUserLoginLog;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface SysUserLoginLogDao extends BaseDAO<Long, SysUserLoginLog> {
+	
+}

+ 0 - 25
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/UserLoginDao.java

@@ -1,25 +0,0 @@
-package com.ym.mec.auth.dal.dao;
-
-import java.util.Date;
-
-import org.apache.ibatis.annotations.Param;
-
-import com.ym.mec.auth.dal.model.UserLogin;
-import com.ym.mec.common.dal.BaseDAO;
-
-public interface UserLoginDao extends BaseDAO<Long, UserLogin> {
-    /**
-     * 获取用户最后登录时间
-     * @param userId
-     * @return
-     */
-    Date getLastLoginTimeByUid(Long userId);
-
-    /**
-     * 获取用户登录次数
-     * @param userId
-     * @param day  天数
-     * @return
-     */
-    int getUserLoginCount(@Param("userId") Long userId, @Param("day") int day);
-}

+ 0 - 24
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/UserLoginLogDao.java

@@ -1,24 +0,0 @@
-package com.ym.mec.auth.dal.dao;
-
-import org.apache.ibatis.annotations.Param;
-
-import com.ym.mec.auth.dal.model.UserLoginLog;
-import com.ym.mec.common.dal.BaseDAO;
-
-public interface UserLoginLogDao extends BaseDAO<Long, UserLoginLog> {
-
-	/**
-	 * 查询用户今日已登陆次数
-	 * @param userId
-	 * @return
-	 */
-	public int queryLoginedTimesOfToday(Long userId);
-
-	/**
-	 * 获取多少天内用户登陆次数
-	 * @param userId
-	 * @param day
-	 * @return
-	 */
-    int findLoginCount(@Param("userId") Long userId, @Param("day") int day);
-}

+ 0 - 65
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/model/UserLoginLog.java

@@ -1,65 +0,0 @@
-package com.ym.mec.auth.dal.model;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
-import com.ym.mec.common.enums.AccessSource;
-
-/**
- * This file is auto generated by Ant & FreeMarker.
- * DO NOT MODIFY IT.All modified content will be lost when next auto generate. 
- * 这个文件是用ANT和FreeMarker自动生成的。
- * 不要修改此文件。所有改动将在下次重新自动生成时丢失。
- */
-/**
- * 对应数据库表(p2p_user_login_log):
- */
-public class UserLoginLog {
-
-	/**  */
-	private Long userId;
-
-	/**  */
-	private String loginIp;
-
-	/**  */
-	private java.util.Date loginTime;
-
-	private AccessSource source;
-
-	public void setUserId(Long userId) {
-		this.userId = userId;
-	}
-
-	public Long getUserId() {
-		return this.userId;
-	}
-
-	public void setLoginIp(String loginIp) {
-		this.loginIp = loginIp;
-	}
-
-	public String getLoginIp() {
-		return this.loginIp;
-	}
-
-	public void setLoginTime(java.util.Date loginTime) {
-		this.loginTime = loginTime;
-	}
-
-	public java.util.Date getLoginTime() {
-		return this.loginTime;
-	}
-
-	public AccessSource getSource() {
-		return source;
-	}
-
-	public void setSource(AccessSource source) {
-		this.source = source;
-	}
-
-	public String toString() {
-		return ToStringBuilder.reflectionToString(this);
-	}
-
-}

+ 8 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserLoginLogService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.auth.service;
+
+import com.ym.mec.auth.api.entity.SysUserLoginLog;
+import com.ym.mec.common.service.BaseService;
+
+public interface SysUserLoginLogService extends BaseService<Long,SysUserLoginLog>{
+
+}

+ 14 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/SysUserLoginService.java

@@ -0,0 +1,14 @@
+package com.ym.mec.auth.service;
+
+import com.ym.mec.auth.api.entity.SysUserLogin;
+import com.ym.mec.common.service.BaseService;
+
+public interface SysUserLoginService extends BaseService<Long, SysUserLogin> {
+
+    /**
+     * 根据用户查询登录信息
+     * @param userId
+     * @return
+     */
+    SysUserLogin findLoginByUserId(Integer userId);
+}

+ 21 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserLoginLogServiceImpl.java

@@ -0,0 +1,21 @@
+package com.ym.mec.auth.service.impl;
+
+import com.ym.mec.auth.api.entity.SysUserLoginLog;
+import com.ym.mec.auth.dal.dao.SysUserLoginLogDao;
+import com.ym.mec.auth.service.SysUserLoginLogService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysUserLoginLogServiceImpl extends BaseServiceImpl<Long,SysUserLoginLog> implements SysUserLoginLogService {
+
+	@Autowired
+	private SysUserLoginLogDao sysUserLoginLogDao;
+
+	@Override
+	public BaseDAO<Long, SysUserLoginLog> getDAO() {
+		return sysUserLoginLogDao;
+	}
+}

+ 26 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserLoginServiceImpl.java

@@ -0,0 +1,26 @@
+package com.ym.mec.auth.service.impl;
+
+import com.ym.mec.auth.api.entity.SysUserLogin;
+import com.ym.mec.auth.dal.dao.SysUserLoginDao;
+import com.ym.mec.auth.service.SysUserLoginService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysUserLoginServiceImpl extends BaseServiceImpl<Long, SysUserLogin> implements SysUserLoginService {
+	
+	@Autowired
+	private SysUserLoginDao sysUserLoginDao;
+
+	@Override
+	public BaseDAO<Long, SysUserLogin> getDAO() {
+		return sysUserLoginDao;
+	}
+
+	@Override
+	public SysUserLogin findLoginByUserId(Integer userId) {
+		return sysUserLoginDao.findLoginByUserId(userId);
+	}
+}

+ 43 - 0
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserLoginLogMapper.xml

@@ -0,0 +1,43 @@
+<?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.ym.mec.auth.dal.dao.SysUserLoginLogDao">
+	
+	<resultMap type="com.ym.mec.auth.api.entity.SysUserLoginLog" id="SysUserLoginLog">
+		<result column="user_id" property="userId" />
+		<result column="login_ip" property="loginIp" />
+		<result column="login_time" property="loginTime" />
+		<result column="source" property="source" />
+	</resultMap>
+	
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysUserLoginLog">
+		SELECT * FROM sys_user_login_log
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.auth.api.entity.SysUserLoginLog" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO sys_user_login_log (user_id,login_ip,login_time,source) VALUES(#{userId},#{loginIp},#{loginTime},#{source})
+	</insert>
+	
+	
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysUserLoginLog" parameterType="map">
+		SELECT * FROM sys_user_login_log <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM sys_user_login_log
+	</select>
+</mapper>

+ 62 - 0
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserLoginMapper.xml

@@ -0,0 +1,62 @@
+<?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.ym.mec.auth.dal.dao.SysUserLoginDao">
+	
+	<resultMap type="com.ym.mec.auth.api.entity.SysUserLogin" id="SysUserLogin">
+		<result column="user_id" property="userId" />
+		<result column="login_count" property="loginCount" />
+		<result column="last_login_time" property="lastLoginTime" />
+		<result column="last_login_ip" property="lastLoginIp" />
+		<result column="fail_count" property="failCount" />
+		<result column="lock_time" property="lockTime" />
+		<result column="lock_date" property="lockDate" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysUserLogin" >
+		SELECT * FROM sys_user_login WHERE user_id = #{userId}
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysUserLogin">
+		SELECT * FROM sys_user_login ORDER BY user_id
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.auth.api.entity.SysUserLogin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" >
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
+		</selectKey>
+		-->
+		INSERT INTO sys_user_login (user_id,login_count,last_login_time,last_login_ip,fail_count,lock_time,lock_date) VALUES(#{userId},#{loginCount},#{lastLoginTime},#{lastLoginIp},#{failCount},#{lockTime},#{lockDate})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.auth.api.entity.SysUserLogin">
+		UPDATE sys_user_login SET user_id = #{userId},last_login_time = #{lastLoginTime},last_login_ip = #{lastLoginIp},fail_count = #{failCount},lock_time = #{lockTime},login_count = #{loginCount},lock_date = #{lockDate} WHERE user_id = #{userId}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM sys_user_login WHERE user_id = #{userId}
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysUserLogin" parameterType="map">
+		SELECT * FROM sys_user_login ORDER BY user_id <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM sys_user_login
+	</select>
+
+	<select id="findLoginByUserId" resultMap="SysUserLogin">
+		SELECT * FROM sys_user_login WHERE user_id = #{userId}
+	</select>
+</mapper>

+ 9 - 10
mec-common/src/main/java/com/ym/mec/common/validcode/impl/SmsCodeServiceImpl.java

@@ -1,18 +1,17 @@
 package com.ym.mec.common.validcode.impl;
 
+import com.ym.mec.common.validcode.SmsCodeService;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
-import com.ym.mec.common.redis.service.RedisCache;
-import com.ym.mec.common.validcode.SmsCodeService;
-
 @Service
 public class SmsCodeServiceImpl implements SmsCodeService {
 
 	@Autowired
-	private RedisCache redisCache;
+	private RedisTemplate<String,String> redisTemplate;
 	
 	private final String loginVerifyCodeKey = "loginVerifyCode:";
 	
@@ -20,8 +19,8 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 
 	@Override
 	public boolean verifyValidCode(String mobile, String authCode) {
-		Object verifyCode = redisCache.get(loginVerifyCodeKey + mobile);
-		if(verifyCode != null && StringUtils.equalsIgnoreCase(verifyCode.toString(),authCode)){
+		String verifyCode = redisTemplate.opsForValue().get(loginVerifyCodeKey + mobile);
+		if(StringUtils.isNoneEmpty(verifyCode) && StringUtils.equalsIgnoreCase(verifyCode,authCode)){
 			return true;
 		}
 		return true;
@@ -31,19 +30,19 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 	public boolean sendValidCode(String mobile) {
 		String code = RandomStringUtils.randomNumeric(6);
 		// 发送验证码
-		redisCache.put(loginVerifyCodeKey + mobile, code, expireTime);
+		redisTemplate.opsForValue().set(loginVerifyCodeKey + mobile, code, expireTime);
 		return true;
 	}
 
 	@Override
 	public String getValidCode(String mobile) {
-		return (String) redisCache.get(loginVerifyCodeKey + mobile);
+		return redisTemplate.opsForValue().get(loginVerifyCodeKey + mobile);
 	}
 
 	@Override
 	public void removeValidCode(String mobile) {
-		if (redisCache.exists(loginVerifyCodeKey + mobile)) {
-			redisCache.delete(loginVerifyCodeKey + mobile);
+		if (redisTemplate.hasKey(loginVerifyCodeKey + mobile)) {
+			redisTemplate.delete(loginVerifyCodeKey + mobile);
 		}
 	}