Browse Source

修改原登录, 加入免密登录用于第三方登录后跳转

v2
蟑螂恶霸 2 years ago
parent
commit
798ecb252a
  1. 30
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/LoginType.java
  2. 48
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/nopaddword/UserToken.java
  3. 16
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/realm/UserRealm.java
  4. 49
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/framework/shiro/service/LoginService.java
  5. 11
      lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/user/controller/LoginController.java
  6. 6
      lib/EmergencyService/zdxtLawEnforcementCodeService/pom.xml
  7. 17
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/controller/ThirdLoginController.java
  8. 8
      lib/EmergencyService/zdxtLawEnforcementCodeService/src/main/java/com/zdxt/code/service/impl/ThirdLoginServiceImpl.java

30
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;
}
}

48
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;
}
}

16
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)
{

49
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))

11
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);

6
lib/EmergencyService/zdxtLawEnforcementCodeService/pom.xml

@ -42,6 +42,12 @@
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>EmergencyService</groupId>
<artifactId>zdxtEmergencyAuthService</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

17
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());

8
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);
}

Loading…
Cancel
Save