自定义登陆逻辑原创
3人赞赏了该文章
191次浏览
未经作者许可,禁止转载编辑于2024年04月29日 18:26:02
项目中,客户提了一个需求,需要在页面上登陆的时候先去AD域校验,最开始的时候想的是直接启用苍穹的AD域登陆设置
但是呢,客户的AD域又很个性化,有用前缀、后缀的,目前还不支持,而且客户想要的效果是先去AD域登陆,如果不成功,再进行苍穹的登陆。
所以就想了一个办法,干预苍穹的登陆逻辑,就衍生出了以下的内容,通过filter干预登陆的接口,优先执行我们的逻辑,不成功,再去执行苍穹的标准登陆。
参考资料如下:
https://vip.kingdee.com/article/318801864630167296?productLineId=29&isKnowledge=2&lang=zh-CN
并附上代码:
ext-filter.xml
<?xml version="1.0" encoding="UTF-8" ?> <web-app> <filter> <filter-name>MyLoginFilter</filter-name> <filter-class>digi.alm.SdxcLoginFilter</filter-class> <filter-order>49996</filter-order> <filter-mapping> <url-pattern>/auth/yzjlogin.do</url-pattern> </filter-mapping> </filter> </web-app>
package digi.alm; import kd.bos.actiondispatcher.ActionUtil; import kd.bos.context.RequestContext; import kd.bos.dc.api.model.Account; import kd.bos.dc.utils.AccountUtils; import kd.bos.lang.Lang; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.login.LoginClientEnum; import kd.bos.login.lang.LoginLangUtils; import kd.bos.login.user.LoginUserService; import kd.bos.login.utils.*; import kd.bos.session.SessionManager; import kd.bos.util.NetAddressUtils; import kd.bos.util.RevProxyUtil; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * </p> * description * <p> * * @author wentao.liu01@foxmail.com 2024/04/28 10:10 */ public class SdxcLoginFilter implements Filter { private static final Log LOGGER = LogFactory.getLog(SdxcLoginFilter.class); public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; //=============================================================================== // 第三方登陆 //=============================================================================== // 如果第三方登陆成功 if(true){ LoginUtils.handleGenernal(request, response); Lang lang = LoginLangUtils.getLoginLanguage(request); String requestURI = request.getRequestURI(); LOGGER.info("Got requestUri: {}.", requestURI); // 初始化RC String accountId = LoginUtils.getParamerter(request, "accountId"); String redirect = LoginUtils.getParamerter(request, "redirect"); String tenantId = RevProxyUtil.getTenantCode(request); String userPassword = LoginUtils.getDecryptedPassword((HttpServletRequest) servletRequest, accountId); RequestContext rc = RequestContext.create(); rc.setAccountId(accountId); rc.setTenantId(tenantId); RequestContext.set(rc); Account currentCenter = AccountUtils.getAccountById(accountId); // 获取用户信息 各类型自行选择 // Map<String, String> user = LoginUserService.getErpUserInfoByUserId(currentCenter, userId, lang.name()); Map<String, String> user = LoginUserService.getErpUserInfoByPhone(currentCenter, "xxxxxxx", lang.name()); // 创建session String sessionId = SessionUtils.createNewSession(request, response, currentCenter, lang, NetAddressUtils.getRemoteHost(request), user, LoginClientEnum.WEB); SessionManager.writeCookieData(request, response, "KHRSESSIONID" + tenantId, sessionId); if (StringUtils.isEmpty(redirect)) { redirect = "index.html"; } else if (LoginUtils.isSelfEnvironmentNew(redirect, request, response) && !SecurityUtils.checkXss(redirect)) { String qs = request.getQueryString(); if (qs != null) { redirect = qs.replace("redirect=", ""); } } else if (StringUtils.isNotEmpty(request.getParameter("isMobile"))) { redirect = "mobile.html"; } else { redirect = "index.html"; } redirect = URLUtils.securityFilterRedirectUrl(redirect); Map<String, Object> map = new HashMap(); map.put("errorcode", 0); map.put("RedirectURL", redirect); map.put("username", user.get("username")); String time = JSONUtils.toString(map); ActionUtil.writeResponseJson(servletResponse, time); }else{ filterChain.doFilter(servletRequest, servletResponse); } } public void init(FilterConfig filterConfig) throws ServletException { } public void destroy() { } }
推荐阅读