From 9e1db983254a475fd7a069937c3f706fe2efe9b4 Mon Sep 17 00:00:00 2001
From: 沈斌 <bluelazysb@hotmail.com>
Date: Thu, 08 Feb 2018 11:41:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/com/moral/security/auth/login/LoginAuthenticationProvider.java            |   12 +++++++++++-
 src/main/java/com/moral/security/common/ErrorCode.java                                  |    2 +-
 src/main/java/com/moral/security/exceptions/AccountExpiredBadCredentialsException.java  |    9 +++++++++
 src/main/java/com/moral/controller/ScreenController.java                                |    2 ++
 src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationFailureHandler.java |    5 ++++-
 5 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 4309f5b..79f60bd 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -298,6 +298,8 @@
 		Account account = accountService.getAccountById(accountId);
 		String regionName = areaService.selectFullNameByCode(code);
 		if(account!=null&&regionName!=null){
+		    //������������
+            regionName = regionName.replace(" ","");
 			Object sensors = sensorService.queryAll();
 			JSONObject params = new JSONObject();
 			params.put("regionCode",code);
diff --git a/src/main/java/com/moral/security/auth/login/LoginAuthenticationProvider.java b/src/main/java/com/moral/security/auth/login/LoginAuthenticationProvider.java
index 7f403c4..46dc354 100644
--- a/src/main/java/com/moral/security/auth/login/LoginAuthenticationProvider.java
+++ b/src/main/java/com/moral/security/auth/login/LoginAuthenticationProvider.java
@@ -1,6 +1,7 @@
 package com.moral.security.auth.login;
 
 import com.moral.entity.Account;
+import com.moral.security.exceptions.AccountExpiredBadCredentialsException;
 import com.moral.security.model.UserContext;
 import com.moral.service.AccountService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +20,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -52,7 +54,15 @@
         String password = (String) authentication.getCredentials();
         LoginMode mode = (LoginMode) authentication.getDetails();
         Account account = accountService.queryAccountByName(accountName).orElseThrow(() -> new UsernameNotFoundException("User not found: " + accountName));
-        if (!encoder.matches(password, account.getPassword()) || account.getExpireTime().before(new Date())) {
+        Date expireTime = Optional.of(account.getExpireTime())
+                .orElseThrow(
+        ()-> new AccountExpiredBadCredentialsException("Authentication Failed. Account has expired.")
+                );
+        Date nowTime = new Date();
+        if(expireTime.getTime()<nowTime.getTime()){
+            throw new AccountExpiredBadCredentialsException("Authentication Failed. Account has expired.");
+        }
+        if (!encoder.matches(password, account.getPassword())) {
             throw new BadCredentialsException("Authentication Failed. Username or Password not valid.");
         }
 
diff --git a/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationFailureHandler.java b/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationFailureHandler.java
index 8eeec89..aeca9fc 100644
--- a/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationFailureHandler.java
+++ b/src/main/java/com/moral/security/auth/login/LoginAwareAuthenticationFailureHandler.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.moral.security.common.ErrorCode;
 import com.moral.security.common.ErrorResponse;
+import com.moral.security.exceptions.AccountExpiredBadCredentialsException;
 import com.moral.security.exceptions.AuthMethodNotSupportedException;
 import com.moral.security.exceptions.JwtExpiredTokenException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +41,9 @@
 		response.setStatus(HttpStatus.UNAUTHORIZED.value());
 		response.setContentType(MediaType.APPLICATION_JSON_VALUE);
 		
-		if (e instanceof BadCredentialsException) {
+		if(e instanceof AccountExpiredBadCredentialsException){
+			mapper.writeValue(response.getWriter(), ErrorResponse.of(e.getMessage(), ErrorCode.ACCOUNT_EXPIRED, HttpStatus.UNAUTHORIZED));
+		}else  if (e instanceof BadCredentialsException) {
 			mapper.writeValue(response.getWriter(), ErrorResponse.of("Invalid username or password", ErrorCode.AUTHENTICATION, HttpStatus.UNAUTHORIZED));
 		} else if (e instanceof JwtExpiredTokenException) {
 			mapper.writeValue(response.getWriter(), ErrorResponse.of("Token has expired", ErrorCode.JWT_TOKEN_EXPIRED, HttpStatus.UNAUTHORIZED));
diff --git a/src/main/java/com/moral/security/common/ErrorCode.java b/src/main/java/com/moral/security/common/ErrorCode.java
index db6750d..6a28162 100644
--- a/src/main/java/com/moral/security/common/ErrorCode.java
+++ b/src/main/java/com/moral/security/common/ErrorCode.java
@@ -12,7 +12,7 @@
 public enum ErrorCode {
     GLOBAL(2),
 
-    AUTHENTICATION(10), JWT_TOKEN_EXPIRED(11);
+    AUTHENTICATION(10), JWT_TOKEN_EXPIRED(11),ACCOUNT_EXPIRED(12);
     
     private int errorCode;
 
diff --git a/src/main/java/com/moral/security/exceptions/AccountExpiredBadCredentialsException.java b/src/main/java/com/moral/security/exceptions/AccountExpiredBadCredentialsException.java
new file mode 100644
index 0000000..c209be6
--- /dev/null
+++ b/src/main/java/com/moral/security/exceptions/AccountExpiredBadCredentialsException.java
@@ -0,0 +1,9 @@
+package com.moral.security.exceptions;
+
+import org.springframework.security.core.AuthenticationException;
+
+public class AccountExpiredBadCredentialsException extends AuthenticationException {
+    public AccountExpiredBadCredentialsException(String msg) {
+        super(msg);
+    }
+}

--
Gitblit v1.8.0