diff --git a/jeepay-core/src/main/java/com/jeequan/jeepay/core/exception/JeepayAuthenticationException.java b/jeepay-core/src/main/java/com/jeequan/jeepay/core/exception/JeepayAuthenticationException.java new file mode 100644 index 0000000..63ac9ef --- /dev/null +++ b/jeepay-core/src/main/java/com/jeequan/jeepay/core/exception/JeepayAuthenticationException.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com). + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jeequan.jeepay.core.exception; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.security.authentication.InternalAuthenticationServiceException; + +/* + * Spring Security 框架自定义异常类 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/6/15 11:23 + */ +@Getter +@Setter +public class JeepayAuthenticationException extends InternalAuthenticationServiceException { + + private BizException bizException; + + public JeepayAuthenticationException(String msg, Throwable cause) { + super(msg, cause); + } + + public JeepayAuthenticationException(String msg) { + super(msg); + } + + public static JeepayAuthenticationException build(String msg){ + return build(new BizException(msg)); + } + + public static JeepayAuthenticationException build(BizException ex){ + + JeepayAuthenticationException result = new JeepayAuthenticationException(ex.getMessage()); + result.setBizException(ex); + return result; + } + +} diff --git a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/secruity/JeeUserDetailsServiceImpl.java b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/secruity/JeeUserDetailsServiceImpl.java index a5a8b43..b52cef5 100644 --- a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/secruity/JeeUserDetailsServiceImpl.java +++ b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/secruity/JeeUserDetailsServiceImpl.java @@ -18,11 +18,11 @@ package com.jeequan.jeepay.mgr.secruity; import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.SysUser; import com.jeequan.jeepay.core.entity.SysUserAuth; -import com.jeequan.jeepay.core.exception.BizException; +import com.jeequan.jeepay.core.exception.JeepayAuthenticationException; +import com.jeequan.jeepay.core.model.security.JeeUserDetails; +import com.jeequan.jeepay.core.utils.RegKit; import com.jeequan.jeepay.service.impl.SysUserAuthService; import com.jeequan.jeepay.service.impl.SysUserService; -import com.jeequan.jeepay.core.utils.RegKit; -import com.jeequan.jeepay.core.model.security.JeeUserDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -31,7 +31,7 @@ import org.springframework.stereotype.Service; /* * 实现UserDetailsService 接口 -* +* * @author terrfly * @site https://www.jeepay.vip * @date 2021/6/8 17:13 @@ -65,7 +65,7 @@ public class JeeUserDetailsServiceImpl implements UserDetailsService { SysUserAuth auth = sysUserAuthService.selectByLogin(loginUsernameStr, identityType, CS.SYS_TYPE.MGR); if(auth == null){ //没有该用户信息 - throw new BizException("用户名/密码错误!"); + throw JeepayAuthenticationException.build("用户名/密码错误!"); } //用户ID @@ -74,11 +74,11 @@ public class JeeUserDetailsServiceImpl implements UserDetailsService { SysUser sysUser = sysUserService.getById(userId); if (sysUser == null) { - throw new BizException("用户名/密码错误!"); + throw JeepayAuthenticationException.build("用户名/密码错误!"); } if(CS.PUB_USABLE != sysUser.getState()){ //状态不合法 - throw new BizException("用户状态不可登录,请联系管理员!"); + throw JeepayAuthenticationException.build("用户状态不可登录,请联系管理员!"); } return new JeeUserDetails(sysUser, auth.getCredential()); diff --git a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/service/AuthService.java b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/service/AuthService.java index 2a74061..63b1e38 100644 --- a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/service/AuthService.java +++ b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/service/AuthService.java @@ -21,6 +21,7 @@ import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.SysUser; import com.jeequan.jeepay.core.exception.BizException; import com.jeequan.jeepay.core.cache.RedisUtil; +import com.jeequan.jeepay.core.exception.JeepayAuthenticationException; import com.jeequan.jeepay.core.jwt.JWTPayload; import com.jeequan.jeepay.core.jwt.JWTUtils; import com.jeequan.jeepay.core.model.security.JeeUserDetails; @@ -29,6 +30,7 @@ import com.jeequan.jeepay.service.impl.SysRoleEntRelaService; import com.jeequan.jeepay.service.impl.SysRoleService; import com.jeequan.jeepay.service.impl.SysUserService; import com.jeequan.jeepay.service.mapper.SysEntitlementMapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -36,6 +38,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -48,6 +51,7 @@ import java.util.*; * @site https://www.jeepay.vip * @date 2021/6/8 17:12 */ +@Slf4j @Service public class AuthService { @@ -75,8 +79,11 @@ public class AuthService { Authentication authentication = null; try { authentication = authenticationManager.authenticate(upToken); + } catch (JeepayAuthenticationException jex) { + throw jex.getBizException() == null ? new BizException(jex.getMessage()) : jex.getBizException(); } catch (AuthenticationException e) { - throw new BizException("用户名或密码有误!"); + log.error("AuthenticationException:", e); + throw new BizException("认证服务出现异常, 请重试或联系系统管理员!"); } JeeUserDetails jeeUserDetails = (JeeUserDetails) authentication.getPrincipal(); diff --git a/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/secruity/JeeUserDetailsServiceImpl.java b/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/secruity/JeeUserDetailsServiceImpl.java index 5e28698..58fdc81 100644 --- a/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/secruity/JeeUserDetailsServiceImpl.java +++ b/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/secruity/JeeUserDetailsServiceImpl.java @@ -18,11 +18,11 @@ package com.jeequan.jeepay.mch.secruity; import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.SysUser; import com.jeequan.jeepay.core.entity.SysUserAuth; -import com.jeequan.jeepay.core.exception.BizException; +import com.jeequan.jeepay.core.exception.JeepayAuthenticationException; +import com.jeequan.jeepay.core.model.security.JeeUserDetails; +import com.jeequan.jeepay.core.utils.RegKit; import com.jeequan.jeepay.service.impl.SysUserAuthService; import com.jeequan.jeepay.service.impl.SysUserService; -import com.jeequan.jeepay.core.utils.RegKit; -import com.jeequan.jeepay.core.model.security.JeeUserDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -66,7 +66,7 @@ public class JeeUserDetailsServiceImpl implements UserDetailsService { SysUserAuth auth = sysUserAuthService.selectByLogin(loginUsernameStr, identityType, CS.SYS_TYPE.MCH); if(auth == null){ //没有该用户信息 - throw new BizException("用户名/密码错误!"); + throw JeepayAuthenticationException.build("用户名/密码错误!"); } //用户ID @@ -75,11 +75,11 @@ public class JeeUserDetailsServiceImpl implements UserDetailsService { SysUser sysUser = sysUserService.getById(userId); if (sysUser == null) { - throw new BizException("用户名/密码错误!"); + throw JeepayAuthenticationException.build("用户名/密码错误!"); } if(CS.PUB_USABLE != sysUser.getState()){ //状态不合法 - throw new BizException("用户状态不可登录,请联系管理员!"); + throw JeepayAuthenticationException.build("用户状态不可登录,请联系管理员!"); } return new JeeUserDetails(sysUser, auth.getCredential()); diff --git a/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/service/AuthService.java b/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/service/AuthService.java index 769677b..8d2cfb3 100644 --- a/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/service/AuthService.java +++ b/jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/service/AuthService.java @@ -22,6 +22,7 @@ import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.MchInfo; import com.jeequan.jeepay.core.entity.SysUser; import com.jeequan.jeepay.core.exception.BizException; +import com.jeequan.jeepay.core.exception.JeepayAuthenticationException; import com.jeequan.jeepay.core.jwt.JWTPayload; import com.jeequan.jeepay.core.jwt.JWTUtils; import com.jeequan.jeepay.core.model.security.JeeUserDetails; @@ -31,6 +32,7 @@ import com.jeequan.jeepay.service.impl.SysRoleEntRelaService; import com.jeequan.jeepay.service.impl.SysRoleService; import com.jeequan.jeepay.service.impl.SysUserService; import com.jeequan.jeepay.service.mapper.SysEntitlementMapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -50,6 +52,7 @@ import java.util.*; * @site https://www.jeepay.vip * @date 2021-04-27 15:50 */ +@Slf4j @Service public class AuthService { @@ -78,8 +81,11 @@ public class AuthService { Authentication authentication = null; try { authentication = authenticationManager.authenticate(upToken); + } catch (JeepayAuthenticationException jex) { + throw jex.getBizException() == null ? new BizException(jex.getMessage()) : jex.getBizException(); } catch (AuthenticationException e) { - throw new BizException("用户名或密码有误!"); + log.error("AuthenticationException:", e); + throw new BizException("认证服务出现异常, 请重试或联系系统管理员!"); } JeeUserDetails jeeUserDetails = (JeeUserDetails) authentication.getPrincipal();