diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/LoginType.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/LoginType.java new file mode 100644 index 00000000..6124b112 --- /dev/null +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/LoginType.java @@ -0,0 +1,30 @@ +package com.zdxt.auth.framework.shiro.nopaddword; + +/** + * @Author: kylin + * @Date: 2024/4/28 10:51 上午 + * @Version: 1.0 + * @Desc: 登录类型枚举类 + */ +public enum LoginType { + /** + * 密码登录 + */ + PASSWORD("password"), + /** + * 免密码登录 + */ + NOPASSWD("nopasswd"); + + private String desc; + + LoginType(String desc) + { + this.desc = desc; + } + + public String getDesc() + { + return desc; + } +} diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/UserToken.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/UserToken.java new file mode 100644 index 00000000..540b9292 --- /dev/null +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/UserToken.java @@ -0,0 +1,48 @@ +package com.zdxt.auth.framework.shiro.nopaddword; + +import org.apache.shiro.authc.UsernamePasswordToken; + +/** + * @Author: kylin + * @Date: 2024/4/28 10:52 上午 + * @Version: 1.0 + * @Desc: 自定义登录Token + */ +public class UserToken extends UsernamePasswordToken +{ + private static final long serialVersionUID = 1L; + + private LoginType type; + + public UserToken() + { + } + + public UserToken(String username, String password, LoginType type, boolean rememberMe) + { + super(username, password, rememberMe); + this.type = type; + } + + public UserToken(String username, LoginType type) + { + super(username, "", false, null); + this.type = type; + } + + public UserToken(String username, String password, LoginType type) + { + super(username, password, false, null); + this.type = type; + } + + public LoginType getType() + { + return type; + } + + public void setType(LoginType type) + { + this.type = type; + } +} \ No newline at end of file diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/UserRealm.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/UserRealm.java index f956298c..a4d33736 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/UserRealm.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/UserRealm.java @@ -4,6 +4,8 @@ import java.util.HashSet; import java.util.Set; import cn.hutool.core.util.StrUtil; +import com.zdxt.auth.framework.shiro.nopaddword.LoginType; +import com.zdxt.auth.framework.shiro.nopaddword.UserToken; import com.zdxt.auth.framework.shiro.service.LoginService; import com.zdxt.common.util.RedisCache; import com.zdxt.domain.auth.User; @@ -92,7 +94,9 @@ public class UserRealm extends AuthorizingRealm implements ZdxtUserRealm @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { - UsernamePasswordToken upToken = (UsernamePasswordToken) token; +// UsernamePasswordToken upToken = (UsernamePasswordToken) token; + UserToken upToken = (UserToken) token; + LoginType type = upToken.getType(); String username = upToken.getUsername(); String password = ""; if (upToken.getPassword() != null) @@ -103,7 +107,15 @@ public class UserRealm extends AuthorizingRealm implements ZdxtUserRealm User user = null; try { - user = loginService.login(username, password); +// user = loginService.login(username, password); + if (LoginType.PASSWORD.equals(type)) + { + user = loginService.login(username, password); + } + else if (LoginType.NOPASSWD.equals(type)) + { + user = loginService.login(username); + } } catch (CaptchaException e) { diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/LoginService.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/LoginService.java index c86a8ca2..638d64c8 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/LoginService.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/LoginService.java @@ -106,6 +106,55 @@ public class LoginService return user; } + public User login(String username) + { + // 验证码校验 + if (!StringUtils.isEmpty(ServletUtils.getRequest().getAttribute(ShiroConstants.CURRENT_CAPTCHA))) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + throw new CaptchaException(); + } + // 用户名或密码为空 错误 + if (StringUtils.isEmpty(username)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); + throw new UserNotExistsException(); + } + + // 用户名不在指定范围内 错误 + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + + // 查询用户信息 + User user = userService.selectUserByLoginName(username); + + if (user == null) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.not.exists"))); + throw new UserNotExistsException(); + } + + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.delete"))); + throw new UserDeleteException(); + } + + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.blocked", user.getRemark()))); + throw new UserBlockedException(); + } + + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + recordLoginInfo(user); + return user; + } + private boolean maybeEmail(String username) { if (!username.matches(UserConstants.EMAIL_PATTERN)) diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java index c0e0334a..d1e7f0fc 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java @@ -4,6 +4,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zdxt.auth.dto.UserBean; +import com.zdxt.auth.framework.shiro.nopaddword.LoginType; +import com.zdxt.auth.framework.shiro.nopaddword.UserToken; import com.zdxt.auth.framework.shiro.service.PasswordService; import com.zdxt.auth.project.system.user.service.ITcUserCidService; import com.zdxt.auth.project.system.user.service.IUserService; @@ -87,7 +89,8 @@ public class LoginController extends BaseController // username = username.toUpperCase(); //解密 password = AesHelper.desEncrypt(password); - UsernamePasswordToken token = new UsernamePasswordToken(username, password, false); +// UsernamePasswordToken token = new UsernamePasswordToken(username, password, false); + UserToken token = new UserToken(username, password, LoginType.PASSWORD); Subject subject = SecurityUtils.getSubject(); try { if ("1".equals(type)) { //APP @@ -167,7 +170,8 @@ public class LoginController extends BaseController public AjaxResult appLogin(String username, String password, Boolean rememberMe, String type, String clientid) { // username = username.toUpperCase(); //解密 - UsernamePasswordToken token = new UsernamePasswordToken(username, password, false); +// UsernamePasswordToken token = new UsernamePasswordToken(username, password, false); + UserToken token = new UserToken(username, password, LoginType.PASSWORD); Subject subject = SecurityUtils.getSubject(); try { //PC @@ -190,7 +194,8 @@ public class LoginController extends BaseController password = "123456"; //解密 // password = AesHelper.desEncrypt(password); - UsernamePasswordToken token = new UsernamePasswordToken(username, password, false); +// UsernamePasswordToken token = new UsernamePasswordToken(username, password, false); + UserToken token = new UserToken(username, password, LoginType.PASSWORD); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); diff --git a/lib/EmergencyService/zdxtLawEnforcementCodeService/pom.xml b/lib/EmergencyService/zdxtLawEnforcementCodeService/pom.xml index c90753ce..5d50ab76 100644 --- a/lib/EmergencyService/zdxtLawEnforcementCodeService/pom.xml +++ b/lib/EmergencyService/zdxtLawEnforcementCodeService/pom.xml @@ -42,6 +42,12 @@ wsdl4j 1.6.3 + + EmergencyService + zdxtEmergencyAuthService + 1.0 + compile + \ No newline at end of file diff --git a/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java b/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java index e281dd71..8f59ce22 100644 --- a/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java +++ b/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java @@ -1,9 +1,10 @@ package com.zdxt.code.controller; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.zdxt.auth.dto.UserBean; import com.zdxt.auth.feign.UserApi; +import com.zdxt.auth.framework.shiro.nopaddword.LoginType; +import com.zdxt.auth.framework.shiro.nopaddword.UserToken; import com.zdxt.code.domain.SiqLogin; import com.zdxt.code.service.ThirdLoginService; import com.zdxt.code.utils.HttpUtil; @@ -54,20 +55,6 @@ public class ThirdLoginController { @PostMapping("/siqLogin") @ResponseBody public ZDResponse siqLogin(@RequestBody SiqLogin siqLogin){ -// try { -// //查询登录用户 -// UserBean user = userApi.getUserByUserLoginName("3ab349ca"); -// //本系统令牌 -// UsernamePasswordToken sysToken = new UsernamePasswordToken(user.getLoginName(), user.getPassword(), false); -// Subject subject = SecurityUtils.getSubject(); -// subject.login(sysToken); -// return ZDResponse.success("登录成功",user); -// } catch (Exception e) { -// e.printStackTrace(); -// } - - - //敏感信息加密 String userIdCode = IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, siqLogin.getUserId()); String userNameCode = IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, siqLogin.getUserName()); diff --git a/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java b/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java index dacc2e6d..c964c946 100644 --- a/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java +++ b/lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.zdxt.auth.dto.UserBean; import com.zdxt.auth.feign.UserApi; +import com.zdxt.auth.framework.shiro.nopaddword.LoginType; +import com.zdxt.auth.framework.shiro.nopaddword.UserToken; import com.zdxt.code.domain.EnterpriseInformation; import com.zdxt.code.service.IEnforcementRegistrationService; import com.zdxt.code.service.IEnterpriseInformationService; @@ -54,7 +56,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService { log.info("用户名:{}",tmpObj.getString("account")); UserBean user = userApi.getUserByUserLoginName(tmpObj.getString("account")); //本系统令牌 - UsernamePasswordToken sysToken = new UsernamePasswordToken(user.getLoginName(), user.getPassword(), false); +// UsernamePasswordToken sysToken = new UsernamePasswordToken(user.getLoginName(), user.getPassword(), false); + UserToken sysToken = new UserToken(user.getLoginName(), LoginType.NOPASSWD); Subject subject = SecurityUtils.getSubject(); subject.login(sysToken); return ZDResponse.success("登录成功",user); @@ -131,7 +134,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService { //查询登录用户 UserBean user = userApi.getUserByUserLoginName(userName); //本系统令牌 - UsernamePasswordToken sysToken = new UsernamePasswordToken(user.getLoginName(), "123456", false); +// UsernamePasswordToken sysToken = new UsernamePasswordToken(user.getLoginName(), "123456", false); + UserToken sysToken = new UserToken(user.getLoginName(), "123456", LoginType.PASSWORD); Subject subject = SecurityUtils.getSubject(); subject.login(sysToken); }