开发一个web网站,用到了多种登录方式:
- 手机验证码登录
- 用户名密码登录
微信登录
login.jsp如下:
只列举了手机登录的代码,同一个页面里还有另外两个div,用boostrap的切换卡来进行动态切换。
<div class="phoneLogin wn_new_l_items" id="phoneLogin">
<a href="#" class="dongtai">手机动态码登录(请选择国际区号)</a><!--手机动态码登录标题-->
<form id="phoneSubmit" method="post">
<div class="form-group">
<div class="input-group">
<input type="text" id="accessname" name="accessname" placeholder="手机号" ><!--手机号输入框-->
<input type="button" class="getcode" id="btnSendCode" name="btnSendCode" value="获取动态密码" onclick="sendMessage()"><!--发送验证码和重新发送按钮-->
</div>
<input type="text" id="code" name="code" placeholder="动态密码">
</div>
<button type="submit" id="loginMobileButton">登录</button>
<input type="hidden" name="loginType" value="1">
<input type="hidden" value="">
</form>
</div>
这三个登录页面是放在一个jsp里的,分三个表单,为了简化提交表单的方式,这三个表单都提交到一个controller方法里。
如何进行判断,这里用了一个较为灵活的处理方法,每个登录的div,都有一个隐藏的标签:
<input type="hidden" name="l_type" value="1">
三种登录方式,l_type分别为1,2,3。
这时候每次传到controller方法的参数是四个(String accessname,String password,String code,int loginType),分别是用户名,密码,验证码,登入类型。
此时的controller方法可以这么写:
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(String accessname,String password,String code,int loginType){
User user = iUserService.getUserByAccessname(accessname);
if(user==null) loginType=0;
//判断登录类型
switch(loginType){
case 0://注册
return "redirect:register?accessname="+accessname;
case 1://手机登录
return "redirect:phoneLogin?accessname="+accessname+"&code="+code;
case 2://密码登录
return "redirect:passwordLogin?accessname="+accessname+"&password="+password;
default://微信登录尚未实现
return null;
}
}
相比if语句而言,有时候switch语句确实能够让代码更加精简,并且用起来非常舒心。
在这里我只是记录一下所获的启示,没有写的太详尽,在一些细节处理上还是需要更加用心才行。