Merge pull request #4 from didi/dev

Dev-0518-2
This commit is contained in:
tcf1207239873
2021-05-18 15:45:55 +08:00
committed by GitHub
39 changed files with 264 additions and 119 deletions

View File

@@ -12,9 +12,29 @@ import javax.servlet.http.HttpServletResponse;
* @date 20/8/20
*/
public interface LoginService {
/**
* 登录
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param dto 登录信息
* @return 登录结果
*/
Result<Account> login(HttpServletRequest request, HttpServletResponse response, LoginDTO dto);
/**
* 登出
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param needJump2LoginPage 是否需要跳转到登录页
*/
void logout(HttpServletRequest request, HttpServletResponse response, Boolean needJump2LoginPage);
/**
* 检查是否登录
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param classRequestMappingValue request-mapping的value
* @return 检查结果, false:未登录或无权限, true:已登录并且有权限
*/
boolean checkLogin(HttpServletRequest request, HttpServletResponse response, String classRequestMappingValue);
}

View File

@@ -7,7 +7,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 单点登录抽象类
* 登录抽象类
* @author zengqiao
* @date 20/8/20
*/

View File

@@ -0,0 +1,50 @@
package com.xiaojukeji.kafka.manager.account.component.login.trick;
import com.xiaojukeji.kafka.manager.common.constant.TrickLoginConstant;
import com.xiaojukeji.kafka.manager.service.service.ConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.Optional;
/**
* @author zengqiao
* @date 21/5/18
*/
@Service
public class TrickLoginService {
private final static Logger LOGGER = LoggerFactory.getLogger(TrickLoginService.class);
@Autowired
private ConfigService configService;
/**
* 是否开启trick的方式登录
*/
public boolean isTrickLoginOn(HttpServletRequest request) {
return TrickLoginConstant.TRICK_LOGIN_SWITCH_ON.equals(request.getHeader(TrickLoginConstant.TRICK_LOGIN_SWITCH));
}
/**
* 开启trick方式登录后当前用户是否可以登录
*/
public String checkTrickLogin(HttpServletRequest request) {
String trickLoginUser = request.getHeader(TrickLoginConstant.TRICK_LOGIN_USER);
LOGGER.info("class=TrickLoginService||method=checkTrickLogin||user={}||uri={}||msg=try trick login", trickLoginUser, request.getRequestURI());
if (!checkTrickLogin(trickLoginUser)) {
LOGGER.warn("class=TrickLoginService||method=checkTrickLogin||user={}||uri={}||msg=trick login failed", trickLoginUser, request.getRequestURI());
return null;
}
return trickLoginUser;
}
private boolean checkTrickLogin(String trickLoginUser) {
return Optional.ofNullable(configService.getArrayByKey(TrickLoginConstant.TRICK_LOGIN_LEGAL_USER_CONFIG_KEY, String.class))
.filter(names -> names.contains(trickLoginUser))
.isPresent();
}
}

View File

@@ -3,6 +3,7 @@ package com.xiaojukeji.kafka.manager.account.impl;
import com.xiaojukeji.kafka.manager.account.AccountService;
import com.xiaojukeji.kafka.manager.account.component.AbstractSingleSignOn;
import com.xiaojukeji.kafka.manager.account.LoginService;
import com.xiaojukeji.kafka.manager.account.component.login.trick.TrickLoginService;
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
import com.xiaojukeji.kafka.manager.common.constant.ApiPrefix;
import com.xiaojukeji.kafka.manager.common.constant.LoginConstant;
@@ -31,6 +32,9 @@ public class LoginServiceImpl implements LoginService {
@Autowired
private AccountService accountService;
@Autowired
private TrickLoginService trickLoginService;
@Autowired
private AbstractSingleSignOn singleSignOn;
@@ -80,7 +84,7 @@ public class LoginServiceImpl implements LoginService {
return true;
}
String username = singleSignOn.checkLoginAndGetLdap(request);
String username = trickLoginService.isTrickLoginOn(request)? trickLoginService.checkTrickLogin(request): singleSignOn.checkLoginAndGetLdap(request);
if (ValidateUtils.isBlank(username)) {
// 未登录, 则返回false, 同时重定向到登录页面
singleSignOn.setRedirectToLoginPage(response);