Unity&Springboot實現本地登陸驗證
Springboot使用IDEA編譯器
IDEA上實現登錄驗證
因為這裡隻能返回網頁,但是我們需要返回登陸是否成功的數據所以下面還需要寫一個請求方法。
如果登陸失敗則將session域中的id刪除,這樣在unity判斷是否登錄成功時會直接按請求錯誤抓取
//登錄操作 @RequestMapping("/login") public String login(HttpServletRequest request, @RequestParam("userType") String userType, Map<String, Object> map,HttpSession session) { session.setAttribute("id",request.getParameter("id")); String id = session.getAttribute("id").toString(); String password = request.getParameter("password"); //如果是管理員登錄則查詢管理員信息表 if(userType.equals("0")){ Administrators administrator = administratorsService.login(id, password); if(administrator != null){ System.out.println("登陸成功"); return "redirect:/ScheduleInfo"; }else { map.put("msg","賬號或密碼錯誤"); //如果登陸失敗則將session域中的id刪除,這樣在unity判斷是否登錄成功時會直接按請求錯誤抓取 session.removeAttribute("id"); return "login"; } }else { //如果是普通用戶登錄則查找普通用戶表 Employees employee = employeesService.login(id, password); if(employee != null){ if (employeesService.findJobById(id).getJob().equals("巡檢人員")){ System.out.println("登陸成功"); return "redirect:/xInfo"; }else { System.out.println("登陸成功"); return "redirect:/wInfo"; } }else { map.put("msg","賬號或密碼錯誤"); session.removeAttribute("id"); return "login"; } } }
返回登錄是否成功和登陸用戶的id信息
這裡使用 @ResponseBody註解,使返回的是數據而不是網頁
@RequestMapping("/getUserInfo") @ResponseBody public String getUserInfo(HttpSession session){ System.out.println("收到unity登錄請求"); //因為登陸失敗以後session域中的id會被刪除,所以判斷為null則登錄失敗 if(session.getAttribute("id") != null){ String id = session.getAttribute("id").toString(); System.out.println("登陸成功"); return id ; } else { System.out.println("登陸失敗"); return null; } }
Unity端的請求
一個簡單的登陸註冊界面
上腳本,看註釋
using System.Collections; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using UnityEngine.Networking; public class HttpHelper : MonoBehaviour { //發出登錄請求 private string postUrl = "http://47.xx.75.xx:8080/login";//如果是本地運行則將前面的47.96.75.29換成localhost //獲得登錄是否成功的數據,也就是運行上面第二個代碼的內瓤 private string postUrl2 = "http://47.xx.75.xx:8080/getUserInfo"; public GameObject[] uis; public GameObject backLoginObj; public Text massage; public Text countText; public Text passwordText; private const string userType = "userType"; private const string userName = "id"; private const string password = "password"; public void loginTest() { //這個方法和登錄按鈕綁定,用於觸發異步方法Post StartCoroutine("Post"); } [System.Obsolete] IEnumerator Post() { //發送登錄表單,每個人不一樣,根據自己需要的表單參數來,一般就是賬號密碼,這裡的userType就是管理員和員工的分類,0是管理員,1是員工。 WWWForm form = new WWWForm(); form.AddField(userType, "0"); form.AddField(userName, countText.text); form.AddField(password, passwordText.text); //這裡發出瞭登錄請求 //利用UnityWebRequest通過請求路徑這個和postman的操作類似,將表單發送出去 UnityWebRequest request = UnityWebRequest.Post(postUrl, form); yield return request.SendWebRequest(); if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.error); } //這裡獲取瞭登錄是否成功的數據 UnityWebRequest request2 = UnityWebRequest.Get(postUrl2); yield return request2.SendWebRequest(); //如果登陸失敗的Session域中的id是空的,所以會報錯,也就是判斷登陸是否成功的依據。 if (request2.isHttpError || request2.isNetworkError) { massage.text = "登陸失敗,賬號或密碼錯誤"; } else { //反之如果登錄成功則獲得返回的數據,這裡就是用戶的id string receiveContent = request2.downloadHandler.text; //這是個普通的ui操作,我的構想是如果登錄成功則將這些ui隱藏隻顯示massage和一個返回鍵 foreach (GameObject ui in uis) { ui.SetActive(false); } massage.gameObject.SetActive(true); backLoginObj.SetActive(true); //如果返回的數據和用戶輸入時的賬號一樣時則判斷登陸成功 if (receiveContent == countText.text) { massage.text = "登陸成功,歡迎管理員" + receiveContent; } else//反之登陸失敗 { massage.text = "登陸失敗,賬號或密碼錯誤"; } } StopCoroutine("Post"); } public void backLogin() { SceneManager.LoadScene("SampleScene"); } }
最後的運行結果
到此這篇關於Unity&Springboot服務器/本地登陸驗證的文章就介紹到這瞭,更多相關Unity&Springboot服務器/本地登陸驗證內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!