简单梳理帆软报表即决策系统的登录步骤 二

简单梳理帆软报表即决策系统的登录步骤 二上一节讲到登录界面我们只需要调用/login得post请求就可以实现登录,登录需要传得参数有username,password,encrypte

欢迎大家来到IT世界,在知识的湖畔探索吧!

上一节讲到登录界面我们只需要调用/login得post请求就可以实现登录,登录需要传得参数有username,password,encrypted(表示密码是否加密了),在fineUI框架中密码加密是通过BI.Providers.getProvider(“dec.provider.cipher”).getCipher(this.getValue())来加密得。

它得代码如下:

	BI.provider("dec.provider.cipher",
		function () {
			var t = function (e) {
				return BI.aesEncrypt(e, Dec.system.frontSeed)
				//return Dec.system.transmissionEncryption === DecCst.System.Encryption.Mode.SM4 ? BI.SM4.ecbEncrypt(e, Dec.system.frontSM4Key) : BI.aesEncrypt(e, Dec.system.frontSeed)
			}, i = function (e) {
				return BI.aesDecrypt(e, Dec.system.frontSeed)
				//return Dec.system.transmissionEncryption === DecCst.System.Encryption.Mode.SM4 ? BI.SM4.ecbDecrypt(e, Dec.system.frontSM4Key) : BI.aesDecrypt(e, Dec.system.frontSeed)
			};
			this.encrypt = function (e) { t = e },
				this.decrypt = function (e) { i = e },
				this.$get = function () {
					return BI.inherit(BI.OB, {
						getCipher: function (e) {
							return t(e)
						},
						getPlain: function (e) {
							return i(e)
						}
					})
				}
		}),

欢迎大家来到IT世界,在知识的湖畔探索吧!

简单梳理帆软报表即决策系统的登录步骤 二

aesEncrypt方法为:

欢迎大家来到IT世界,在知识的湖畔探索吧! aesEncrypt: function (text, key) {
                key = CryptoJS.enc.Utf8.parse(key);
                var cipher = CryptoJS.AES.encrypt(text, key, {
                    mode: CryptoJS.mode.ECB,
                    padding: CryptoJS.pad.Pkcs7
                });
    
                var base64Cipher = cipher.ciphertext.toString(CryptoJS.enc.Base64);
                return base64Cipher;
            }
简单梳理帆软报表即决策系统的登录步骤 二

CryptoJS有需要的可以到我的资源里去下载。

当我们参数准备好之后,调用ajax POST请求到/login,就会进入到LoginResource的login方法中,方法如下:

@RequestMapping(
        value = {"/login"},
        method = {RequestMethod.POST}
    )
    @ResponseBody
    @DeviceBinding(
        autoBindFirstDevice = true
    )
    public Response login(HttpServletRequest req, HttpServletResponse res, @RequestBody LoginRequestInfoBean loginRequestInfoBean) throws Exception {
        try {
            LoginResponseInfoBean responseInfoBean = LoginService.getInstance().login(req, res, loginRequestInfoBean);
            EventDispatcher.fire(LogInOutEvent.LOGIN, new LogInOutResultInfo(req, res, loginRequestInfoBean.getUsername(), true));
            return Response.ok(responseInfoBean);
        } catch (Exception var5) {
            EventDispatcher.fire(LogInOutEvent.LOGIN, new LogInOutResultInfo(req, res, loginRequestInfoBean.getUsername(), false));
            throw var5;
        }
    }
简单梳理帆软报表即决策系统的登录步骤 二

1 调用LoginService的login来登录。它的login方法如下:

欢迎大家来到IT世界,在知识的湖畔探索吧! @Metrics
    public LoginResponseInfoBean login(HttpServletRequest req, HttpServletResponse res, LoginRequestInfoBean loginReqInfo) throws Exception {
        String password = TransmissionTool.decrypt(loginReqInfo.isEncrypted(), loginReqInfo.isSupportCustomEncrypt(), loginReqInfo.getPassword());
        String username = loginReqInfo.getUsername();
        if (WebServiceUtils.containSQLChars(username)) {
            throw new SpecialCharProhibitException();
        } else {
            Device device = NetworkHelper.getDevice(req);
            String ip = WebServiceUtils.getIpInfoFromRequest(req);
            SliderVerificationService.getInstance().dealWithSliderVerification(device, ip, loginReqInfo.getSliderToken());
            User user = UserService.getInstance().getUserByUserName(username);
            if (user == null) {
                SliderVerificationService.getInstance().addErrorCount(ip);
                throw new UserLoginException();
            } else {
                TerminalHandler terminal = TerminalHandler.getTerminal(req, device);
                AuthenticController authenticController = ControllerFactory.getInstance().getAuthenticController(user.getId());
                this.doUserAuthentication(authenticController, user, password, device, ip, terminal);
                long tokenTimeout = this.getTokenTimeOutByValidity(loginReqInfo.getValidity());
                String token = JwtUtils.createDefaultJWT(user.getUserName(), user.getDisplayName(), tokenTimeout);
                authenticController.verifySingleLoginStatus(user.getUserName(), terminal, token, loginReqInfo.getMacAddress());
                if (authenticController.passwordChangeable(user)) {
                    PasswordStrategyService.getInstance().checkPasswordNeedUpdate(user, token);
                    PasswordStrategyService.getInstance().checkPasswordStrength(password, username, token);
                }

                if (this.needLoginVerification(device)) {
                    throw new UnverifiedCaptchaException(token);
                } else {
                    RegisterService.getInstance().checkLicExpireSoon(user);
                    OriginUrlResponseBean url = this.getOriginUrlResponse(loginReqInfo.getOrigin());
                    LoginClientBean clientBean = new LoginClientBean(req, device, terminal);
                    clientBean.setUsername(user.getUserName());
                    clientBean.setToken(token);
                    clientBean.setValidity(loginReqInfo.getValidity());
                    clientBean.setUserId(user.getId());
                    clientBean.setMacAddress(loginReqInfo.getMacAddress());
                    authenticController.logoutSingleLoginInvalidUser(user.getUserName(), terminal, loginReqInfo.getMacAddress());
                    this.addLoginStatus(token, clientBean, tokenTimeout);
                    this.checkServerInitStatus();
                    this.createLoginMessage(ip, user.getUserName(), user.getId());
                    if (ServerConfig.getInstance().isTokenFromCookie()) {
                        this.writeToken2Cookie(res, token, loginReqInfo.getValidity());
                    }

                    return new LoginResponseInfoBean(token, url, user.getUserName(), loginReqInfo.getValidity());
                }
            }
        }
    }
简单梳理帆软报表即决策系统的登录步骤 二

1 解密密码

2 检查用户名是否有sql注入字符

3 根据用户名获取用户

4 使用JwtUtils来创建token,

5 设置相关信息返回给前端

返回到前端页面,前端做如下处理:

BI.Cache.addCookie(DecCst.Cookie.REMEMBER_LOGIN, e.validity, Dec.loginConfig.cookiePath, i),
						BI.Cache.addCookie(DecCst.Cookie.TOKEN, e.accessToken, Dec.loginConfig.cookiePath, i),


 window.location.href = e.originUrl 
简单梳理帆软报表即决策系统的登录步骤 二

将相关信息写到cookie里,页面定位到最初打开的地址上。

至此,finereport决策系统的登录过程就分析完了,下一节我会做自定义一个登录界面的demo

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/42311.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信