Bladeren bron

update login

deason 1 jaar geleden
bovenliggende
commit
325ad8d295

+ 3 - 4
src/main/java/cn/com/qmth/examcloud/tool/controller/IndexController.java

@@ -36,10 +36,9 @@ public class IndexController extends BaseController {
     }
 
     @PostMapping(value = "/login")
-    public void doLogin(@RequestParam String domain,
-                        @RequestParam String loginName,
-                        @RequestParam String password) {
-        User user = commonService.login(domain, loginName, password);
+    public void doLogin(@RequestParam String serverUrl, @RequestParam String loginName, @RequestParam String password,
+            @RequestParam(required = false) String smsCode) {
+        User user = commonService.login(serverUrl, loginName, password, smsCode);
         currentSession().setAttribute(Constants.LOGIN_USER, user);
     }
 

+ 19 - 11
src/main/java/cn/com/qmth/examcloud/tool/service/CommonService.java

@@ -7,6 +7,7 @@ import cn.com.qmth.examcloud.tool.utils.JsonMapper;
 import cn.com.qmth.examcloud.tool.vo.Pager;
 import cn.com.qmth.examcloud.tool.vo.user.User;
 import com.fasterxml.jackson.core.type.TypeReference;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,27 +29,33 @@ public class CommonService {
     public User login(Long rootOrgId, String loginName, String password) {
         Map<String, Object> params = new HashMap<>();
         params.put("rootOrgId", rootOrgId);
+        params.put("accountType", "COMMON_LOGIN_NAME");
         params.put("accountValue", loginName);
         params.put("password", password);
-        return this.doLogin(params);
+        return this.doLogin(sysProperty.getServerUrl(), params);
     }
 
-    public User login(String domain, String loginName, String password) {
-        if (!domain.contains(".ecs.qmth.com.cn")) {
-            domain += ".ecs.qmth.com.cn";
-        }
+    public User login(String serverUrl, String loginName, String password, String smsCode) {
+        // serverUrl 示例:abc.exam-cloud.cn
+        String[] values = serverUrl.split("\\.");
+        String domain = values[0] + ".ecs.qmth.com.cn";
+        String httpUrl = "https://" + serverUrl;
+        log.info("serverUrl:{}  domain:{}", httpUrl, domain);
+
         Map<String, Object> params = new HashMap<>();
         params.put("domain", domain);
+        params.put("accountType", "COMMON_LOGIN_NAME");
         params.put("accountValue", loginName);
         params.put("password", password);
-        return this.doLogin(params);
-    }
+        if (StringUtils.isNotBlank(smsCode)) {
+            params.put("smsCode", smsCode);
+        }
 
-    private User doLogin(Map<String, Object> params) {
-        params.put("accountType", "COMMON_LOGIN_NAME");
-        params.put("smsCode", "5220");
+        return this.doLogin(httpUrl, params);
+    }
 
-        String url = sysProperty.getServerUrl() + "/api/ecs_core/auth/login";
+    private User doLogin(String serverUrl, Map<String, Object> params) {
+        String url = serverUrl + "/api/ecs_core/auth/login";
         String result = HttpHelper.post(url, null, params);
         log.info("LOGIN_IN {}", result);
 
@@ -73,6 +80,7 @@ public class CommonService {
 
         JsonMapper jsonMapper = new JsonMapper();
         Pager<CourseVO> page = jsonMapper.parseJson(json, new TypeReference<Pager<CourseVO>>() {
+
         });
 
         if (page != null && page.getContent() != null) {

+ 99 - 28
src/main/resources/templates/login.ftlh

@@ -10,28 +10,46 @@
     <el-container>
         <el-main>
             <el-row>
-                <el-col :span="8" :offset="8">
-                    <h1 style="text-align: center">考试云平台工具</h1>
-                    <el-form label-position="left" label-width="80px">
-                        <el-form-item label="学校域名">
-                            <el-input v-model="domain" placeholder="请输入学校域名">
-                                <template slot="append">.exam-cloud.cn</template>
-                            </el-input>
-                        </el-form-item>
-
-                        <el-form-item label="账号">
-                            <el-input v-model="loginName" placeholder="请输入账号"></el-input>
-                        </el-form-item>
-
-                        <el-form-item label="密码">
-                            <el-input v-model="password" placeholder="请输入密码" @keyup.enter.native="doLogin"
-                                      show-password></el-input>
-                        </el-form-item>
-
-                        <el-form-item>
-                            <el-button type="primary" @click="doLogin" round>登 录</el-button>
-                        </el-form-item>
-                    </el-form>
+                <el-col :span="10" :offset="7">
+                    <el-card shadow="hover">
+                        <h1 style="text-align: center">考试云平台工具</h1>
+
+                        <el-form label-position="right" label-width="100px">
+                            <el-form-item label="环境:">
+                                <el-radio-group v-model="env">
+                                    <el-radio label="prod">正式环境</el-radio>
+                                    <el-radio label="test">测试环境</el-radio>
+                                    <el-radio label="dev">开发环境</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+
+                            <el-form-item label="学校域名:">
+                                <el-input v-model="domain" placeholder="请输入学校域名">
+                                    <template slot="prepend">https://</template>
+                                    <template slot="append">{{ envUrl }}</template>
+                                </el-input>
+                            </el-form-item>
+
+                            <el-form-item label="账号:">
+                                <el-input v-model="loginName" placeholder="请输入账号"
+                                          @keyup.enter.native="doLogin"></el-input>
+                            </el-form-item>
+
+                            <el-form-item label="密码:">
+                                <el-input v-model="password" placeholder="请输入密码"
+                                          @keyup.enter.native="doLogin" show-password></el-input>
+                            </el-form-item>
+
+                            <el-form-item label="验证码:">
+                                <el-input v-model="smsCode" placeholder="请输入短信验证码,选填!"
+                                          @keyup.enter.native="doLogin"></el-input>
+                            </el-form-item>
+
+                            <el-form-item>
+                                <el-button type="primary" @click="doLogin" round>登 录</el-button>
+                            </el-form-item>
+                        </el-form>
+                    </el-card>
                 </el-col>
             </el-row>
         </el-main>
@@ -42,29 +60,82 @@
     new Vue({
         el: '#myVue',
         data: {
+            env: "prod",
+            envUrl: "",
             domain: "",
             loginName: "",
-            password: ""
+            password: "",
+            smsCode: ""
+        },
+        watch: {
+            env: {
+                immediate: true,
+                handler(value) {
+                    console.log("env:", value);
+                    this.envUrl = this.loadEnvUrl(value);
+                },
+            }
         },
         methods: {
             doLogin() {
-                let url = "${base}/login?domain=" + this.domain + ".ecs.qmth.com.cn&loginName="
-                    + this.encodeStr(this.loginName) + "&password=" + this.encodeStr(this.password);
+                if (!this.domain) {
+                    this.$notify({
+                        title: "提示",
+                        message: "请输入学校域名!",
+                        type: "warning",
+                    });
+                    return;
+                }
 
-                axios.post(url).then((response) => {
+                if (!this.loginName) {
                     this.$notify({
-                        message: "登录成功!",
-                        type: "success",
+                        title: "提示",
+                        message: "请输入账号!",
+                        type: "warning",
                     });
+                    return;
+                }
 
+                if (!this.password) {
+                    this.$notify({
+                        title: "提示",
+                        message: "请输入密码!",
+                        type: "warning",
+                    });
+                    return;
+                }
+
+                let serverUrl = this.domain + this.envUrl;
+                let url = "${base}/login?serverUrl=" + this.encodeStr(serverUrl)
+                    + "&loginName=" + this.encodeStr(this.loginName)
+                    + "&password=" + this.encodeStr(this.password)
+                    + "&smsCode=" + this.encodeStr(this.smsCode);
+
+                axios.post(url).then(() => {
                     window.location.href = '${base}/admin/workspace';
                 }).catch((error) => {
                     this.$notify({
+                        title: "登录失败",
                         message: error.response.data.message,
                         type: "error",
                     });
                 });
             },
+            loadEnvUrl(env) {
+                if (env === "prod") {
+                    return ".exam-cloud.cn";
+                }
+
+                if (env === "test") {
+                    return ".ea100.com.cn";
+                }
+
+                if (env === "dev") {
+                    return ".dev39.qmth.com.cn";
+                }
+
+                return "";
+            },
             encodeStr(value) {
                 if (value) {
                     return encodeURIComponent(value);