1. 程式人生 > >使用者名稱、郵箱、手機號搭配密碼都可以實現登陸(2種方法)

使用者名稱、郵箱、手機號搭配密碼都可以實現登陸(2種方法)

這是我在藍橋班初學java做的第二個專案所遇到和解決的問題,寫下來紀念,順便供有緣人蔘考。
使用者名稱/手機號/郵箱+密碼登陸是當今最常用的登陸,對初學者而言這是必須掌握和精通的,這也是在我基礎薄弱的我堅持解決的動力,其中感謝隊友李青的大力協助。

前提:

model中寫好teacher實體類,並提供getter和setter方法、toString重寫轉字串。
SqlMapConfig.xml中configuration的typeAliases標籤設定別名:

<configuration>
 <typeAliases>
  <typeAlias type="com.lq.model.Teacher" alias="teacher"/>
 </typeAliases>
</configuration>

service層applicationContext-service.xml中使用 dubbo協議設定要暴露的介面

<dubbo:service interface="com.lq.service.ITeacherService" ref="teacherService" protocol="dubbo" />

web層spring-servlet.xml中配置zookeeper
注:執行時別忘啟動zookeeper

<dubbo:reference id="teacherService" interface="com.lq.service.ITeacherService" timeout="1200000"/>

teacherLogin.jsp

<form class="form-auth-small" action="/teacher/teacherLogin.do" method="post">
	<div class="form-group">
		<label for="signin-email" class="control-label sr-only">教師姓名</label>
		<input type="text" class="form-control" id="signin-email" 
		placeholder="輸入使用者名稱/郵箱/手機號" name="teaName">
	</div>
	<div class="form-group">
		<label for="signin-password" class="control-label sr-only">密碼</label>
		<input type="password" class="form-control" id="signin-password" 
		autocomplete="off" name="teaPassword">
	</div>
	<div class="error-mess">
		<span id="error-message">帳戶名或登入密碼不正確,請重新輸入</span>
	</div>
	
	<div class="form-group clearfix">
		<label class="fancy-checkbox element-left">
			<input type="checkbox">
			<span>記住密碼</span>
		</label>
	</div>
	<button type="submit" class="btn btn-primary btn-lg btn-block">登陸</button>
	<div class="bottom">
		<span class="helper-text">
			<i class="fa fa-lock"></i> 
			<a href="#">忘記密碼?</a>
		</span>
	</div>
</form>

解決思路

共有2種方法
(1)正則表示式寫於controller層。
判斷2次輸入的值是否匹配手機號或郵箱,預設使用者名稱登陸。如果輸入的值為手機號/郵箱,則將model實體類的使用者名稱的setter方法置空,並將前端傳過來的值賦給手機號的setter方法。
注:js和java實現同效,用的正則表示式不一樣
(2)jsp前端中用js進行正則表示式判斷。

TeacherController.java

@Controller
@RequestMapping("/teacher")
public class TeacherController {
	@Autowired
	private ITeacherService teacherService;
	
	@RequestMapping(value="/teacherLogin",method=RequestMethod.POST)
	public String teaLogin(Teacher teacher,Model model,HttpServletRequest request) {
		HttpSession session = request.getSession();
		
		String teaName=teacher.getTeaName();
		String teaPassword=teacher.getTeaPassword();
		
		//判斷是郵箱還是手機號的正則表示式
		String em = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";/*注:js和java用正則表示式不一樣*/
		/*String em ="/^\\[email protected]\\w+\\.[A-Za-z]{2,3}(\\.[A-Za-z]{2,3})?$/";*/     /*js用正則表示式*/ 
		String ph = "^((13[0-9])|(15[^4,\\D])|(17[0-9])|(18[0,5-9]))\\d{8}$";  /*java用驗證手機號*/
		
		/*測試用程式碼,前臺輸入手機號時測試,matches返回true/false*/
		/*System.out.println(teaName);
		System.out.println(teaName.matches(ph));*/
		
		if(teaName.matches(ph)) {
			/*如果匹配上則將教師名置空,並將teaName中的值寫到setTeaPhone()方法中*/
			teacher.setTeaName(null);
			teacher.setTeaPhone(teaName);
			
			/*程式碼測試用*/
			System.out.println(teacher.getTeaPhone());
			
		}else if(teaName.matches(em)) {
			teacher.setTeaName(null);
			teacher.setTeaEmail(teaName);
		}
		
		Teacher teaTem=teacherService.teaLogin(teacher);
		if(teaTem==null) {
			return "fail";
		}
		request.getSession().setAttribute("sessionTeacher", teaTem);
		return "/manager/manager";
	}
}

介面ITeacherService

public interface ITeacherService {
	//驗證老師登入
	public Teacher teaLogin(Teacher teacher);
}

實現介面類TeacherService

@Service("teacherService")
public class TeacherService implements ITeacherService {
	@Autowired
	private TeacherMapper teacherMapper;

	@Override
	public Teacher teaLogin(Teacher teacher) {
		/*測試用程式碼*/
		/*System.out.println(teacher.getTeaPhone());
		System.out.println(teacher.getTeaPassword());
		System.out.println(teacher.getTeaName());
		System.out.println(teacher.getTeaEmail());*/
		
		return teacherMapper.teaLogin(teacher);
	}
}

注:此專案採用面向介面程式設計,故Dao層也是介面TeacherMapper.java
(面向介面程式設計,必須xml配置檔案的id必須與Dao層java檔案中的方法名一致)

public interface TeacherMapper {
	//驗證老師登入
	public Teacher teaLogin(Teacher teacher);
}

TeacherMapper.xml做if test動態sql

<mapper namespace="com.lq.dao.TeacherMapper">
<!--此處編寫sql語句-->
<select id="teaLogin" parameterType="teacher" resultType="teacher">
	select * from teacher where 1=1
	<if test="teaName!=null and teaName!=''">
		and teaName=#{teaName}
	</if>
	<if test="teaPhone!=null and teaPhone!=''">
		and teaPhone=#{teaPhone}
	</if>
	<if test="teaEmail!=null and teaEmail!=''">
		and teaEmail=#{teaEmail}
	</if>
	<if test="teaPassword!=null and teaPassword!=''">
		and teaPassword=#{teaPassword}
	</if>
</select>
</mapper>

(2)jsp前端中用js進行正則表示式判斷。
teacherLogin.jsp

<form class="form-auth-small" action="/teacher/teacherLogin.do" method="post" onSubmit="return checkForm()">
 <div class="form-group">       
  <input type="text" class="form-control" id="signin-mess" name="teaName" 
  onblur="checkTeaMess()" placeholder="使用者名稱">
 </div>
 <div class="form-group">         
  <input type="password" class="form-control" id="signin-password"  name="teaPassword" 
  onblur="checkPassword()" placeholder="請輸入密碼">
 </div>
 
 <!-- 錯誤資訊提示 -->
 <div class="error-mess">
  <span id="error-message" >${error_mess }</span>
 </div>
 
 <button type="submit" id="submit" class="btn btn-primary btn-lg btn-block">登陸</button>
 <div class="bottom">
  <span class="helper-text"><i class="fa fa-lock"></i> <a href="#">忘記密碼?</a></span>
 </div>
</form>```
……
/*js程式碼:*/
<script type="text/javascript" language="javascript">
	function checkForm(){ 
		  var teaName = checkTeaMess(); 
		  var teaPassword = checkPassword(); 
		  return teaName && teaPassword; 
	} 
 
	function checkPassword(){
		var teaPassword = $("#signin-password").val(); 
		 var errorMess=$("#error-message");
		if(teaPassword.length==0){
			errorMess.innerHtml="使用者名稱不能為空";
			/* errorMess.css({'display':'block','color':'red'}); */
		}
		return true;
	}
	
	function checkTeaMess(){
		var regPhone=/^1[34578]\d{9}$/;/* 手機號驗證,11位手機號 */
		var regName=/^\w{3,}$/;/*教師名驗證,至少三位 */
		var regEmai=/^\[email protected]\w+\.[A-Za-z]{2,3}(\.[A-Za-z]{2,3})?$/;
		
		/* 獲取教師登陸資訊 */
		var teaName = $("#signin-mess").val();//獲取輸入登陸資訊
		var teaPassword=$("#signin-password").val();//獲取輸入的密碼
		 var errorMess=$("#error-message");
		
		/* 判斷使用者輸入是否為郵箱,是則將name屬性值改為郵箱 */
		if(regEmai.test(teaName)){
			$("#signin-mess").attr("name","teaEmail");
		}	
		
		/* 判斷使用者輸入是否為郵箱,是則將name屬性值改為郵箱 */
		if(regPhone.test(teaName)){
			$("#signin-mess").attr("name","teaPhone");
		}
	}
</script>

相關推薦

使用者名稱郵箱機號搭配密碼可以實現登陸2方法

這是我在藍橋班初學java做的第二個專案所遇到和解決的問題,寫下來紀念,順便供有緣人蔘考。 使用者名稱/手機號/郵箱+密碼登陸是當今最常用的登陸,對初學者而言這是必須掌握和精通的,這也是在我基礎薄弱的我堅持解決的動力,其中感謝隊友李青的大力協助。 前提: mod

查看Linux內核版本命令方法

use proc color tex 2.6 distrib oot lin hat 一、查看Linux內核版本命令(兩種方法):1、cat /proc/version[[email protected]CentOS home]# cat /proc/versio

javaSE (二十六map集合遍歷方法輸入字元,計算字元出現次數用map實現HashMap巢狀HashMap

1、map集合遍歷: map集合沒有iterator方法,所以不能直接迭代 直接看下面的程式碼和第一行的註解(加了註釋之後變黑看不清了,所以前面沒加註釋) 1、map的第一種遍歷:遍歷map的所有值:method1() 獲取所有的鍵的集合:Set<K> keySet()

如何禁用U盤遮蔽USB埠方法

由於電腦自身安全、商業機密保護的需要,常常要禁用電腦USB介面,尤其是禁用帶有USB儲存功能的裝置,如U盤、行動硬碟和手機儲存卡等,但同時又不能完全遮蔽USB介面的使用,因為現在很多的滑鼠和鍵盤都是USB埠。這種情況下,如何限制U盤使用而又不影響USB滑鼠和鍵盤的使用就成為

sql 實現用戶名郵箱機號登錄

append nes class select logs lec email mobile () StringBuilder strSql = new StringBuilder(); strSql.Append("se

實現使用者名稱郵箱機號可以登入

登入會員名區分大小寫,郵箱不區分大小寫: 使用者名稱 手機號存在了 tb_user表 郵箱存在了comm_company表 在登入時把 登入名 (username)和密碼(password)帶到後臺,

怎麼實現使用機號郵箱使用者名稱登入

測試的程式碼: public static void main(String[] args) { //String e = "[email protected]"; String e ="15315315326"; String em = "^\\w+([-+.]\\w+)*@\\w+([-.]\

Android 判斷字串是不是是身份證郵箱銀行卡機號中文 1

Android 判斷字串是否是身份證、郵箱、銀行卡、手機號、中文 1.判斷字串是否是身份證:     /**       * 功能:身份證的有效驗證       *        * @param IDStr       *            身份證號       *

js 驗證機號郵箱數字檔案字尾

// js 驗證檔案 /** * 驗證手機號碼格式 * @param {Object} id */ function checkMobile(id) { var val = $("#"

swift 機號郵箱網址等正則表示式驗證

import Foundation enum Validate { case email(_: String) case phoneNum(_: String) case carNum(_: String) case username(_: String) case

Objective-C用正則表示式判斷字串是否為機號郵箱身份證號

用正則表示式判斷字串是否為手機號: - (BOOL)isPhoneNumber:(NSString *)str { NSString * MOBILE = @"^1(3[0-9]|5[0-

常用正則表示式機號郵箱URL地址身份證等等

一、前言   不好的習慣:1、每一次用到正則都是上網copy一份,也沒有去學習思考,看看都是什麼意思;         2、一個專案裡不同的地方用到了相同的校驗,一直在重複的copy程式碼,並沒有統一起來,萬一哪天要修改規則,若是多人開發,每個人的正則校驗不盡相同,改起來就很麻煩。   先記錄一下,後續慢慢學

phpjavascript隱藏機號函數

oot pre hid 位數 join urn fun () length php:a. 代碼: /* * @desc:隱藏手機號 * @param:tel 手機號,如:13987654321 * @param:num 隱藏的位數,默認4位 * @return ret 回顯

js驗證郵箱機號

xxx www 數字 規則 str 網站 turn return 郵箱 驗證帳號是否合法驗證規則:字母、數字、下劃線組成,字母開頭,4-16位。 var str=$("#zhanghao").val();var re = /^[a-zA-z]\w{3,15}$/; if(r

android 輸入框 機號密碼 郵箱 ,網路,圖片格式等 判斷 工具類 封裝簡單實現

我們android 開發人員都會與到 登入註冊,郵箱驗證等問題 ,我們需要if判斷 ,簡單邏輯 比較好些,隨著產品的需求,格式越來越多,邏輯越來越複雜,下面 給大家推薦 一下自己封裝的一個工具類 裡面對應的正的表示式等多個簡單實用 首先是一個工具類   public

android 輸入框 機號密碼 郵箱 ,網路,圖片格式等 判斷 工具類 封裝簡單實現

我們android 開發人員都會與到 登入註冊,郵箱驗證等問題 ,我們需要if判斷 ,簡單邏輯 比較好些,隨著產品的需求,格式越來越多,邏輯越來越複雜,下面 給大家推薦 一下自己封裝的一個工具類 裡面對應的正的表示式等多個簡單實用 首先是一個工具類   public cl

[轉]常用正則表示式大全-----使用者名稱密碼郵箱等資料格式的校驗

正則表示式收集,供自己查閱之用 轉自:http://www.jb51.net/article/72867.htm 一、校驗數字的表示式 1 數字:^[0-9]*$  2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$  4 m-n位的數字:^

訊號量郵箱佇列與事件

訊號量,郵箱,佇列的最大不同在於它們傳送的內容不同。 訊號量是一個觸發訊號,也是一個計數器,等待接收訊號的任務一般只有接收到訊號才可以執行,否則任務一直暫停。 郵箱是訊號量的擴充套件,相當於把一個指標定義的變數從一個任務傳遞到另一個或多個任務中去,這個指標是先發到郵箱

Android TextView通過Spannable識別超連結郵箱電話

現在有好多應用都能識別電話號碼、郵箱、超連結,點選電話號碼可以直接呼叫系統電話進行撥打,點選郵箱則呼叫系統郵箱或者第三方的郵箱,點選超連結則會進入瀏覽器,方便操作。現在經過簡單的封裝來實現這三個功能。 public class LinkifySpannable

jquery同時驗證郵箱機號

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html