SpringSecurity實現短信登錄功能
阿新 • • 發佈:2019-03-31
his method bmi 號碼 exception param .so rri ping
⒈封裝短信驗證碼類
1 package cn.coreqi.security.validate; 2 3 import java.time.LocalDateTime; 4 5 public class ValidateCode { 6 private String code; 7 private LocalDateTime expireTime; //過期時間 8 9 public ValidateCode(String code, Integer expireIn) { 10 this.code = code;11 this.expireTime = LocalDateTime.now().plusSeconds(expireIn); 12 } 13 14 public ValidateCode(String code, LocalDateTime expireTime) { 15 this.code = code; 16 this.expireTime = expireTime; 17 } 18 19 public boolean isExpried(){ 20 return LocalDateTime.now().isAfter(expireTime);21 } 22 public String getCode() { 23 return code; 24 } 25 26 public void setCode(String code) { 27 this.code = code; 28 } 29 30 public LocalDateTime getExpireTime() { 31 return expireTime; 32 } 33 34 public void setExpireTime(LocalDateTime expireTime) {35 this.expireTime = expireTime; 36 } 37 38 }
⒉封裝短信驗證碼接口及實現類
1 package cn.coreqi.security.validate; 2 3 public interface SmsCodeSender { 4 void send(String mobile,String code); 5 }
1 package cn.coreqi.security.validate; 2 3 public class DefaultSmsCodeSender implements SmsCodeSender { 4 @Override 5 public void send(String mobile, String code) { 6 System.out.println("向手機"+mobile+"發送短信驗證碼"+code+""); 7 } 8 }
⒊封裝驗證碼控制器
1 package cn.coreqi.security.controller; 2 3 import cn.coreqi.security.validate.DefaultSmsCodeSender; 4 import cn.coreqi.security.validate.SmsCodeSender; 5 import cn.coreqi.security.validate.ValidateCode; 6 import org.apache.commons.lang3.RandomStringUtils; 7 import org.springframework.social.connect.web.HttpSessionSessionStrategy; 8 import org.springframework.social.connect.web.SessionStrategy; 9 import org.springframework.web.bind.ServletRequestBindingException; 10 import org.springframework.web.bind.ServletRequestUtils; 11 import org.springframework.web.bind.annotation.GetMapping; 12 import org.springframework.web.bind.annotation.RestController; 13 import org.springframework.web.context.request.ServletWebRequest; 14 15 import javax.servlet.http.HttpServletRequest; 16 import javax.servlet.http.HttpServletResponse; 17 18 @RestController 19 public class ValidateSmsController { 20 21 public static final String SESSION_KEY = "SESSION_KEY_IMAGE_CODE"; 22 private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy(); 23 24 @GetMapping("/code/sms") 25 public void createSmsCode(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException { 26 ValidateCode smsCode = new ValidateCode(RandomStringUtils.randomNumeric(4),60); 27 sessionStrategy.setAttribute(new ServletWebRequest(request),SESSION_KEY,smsCode); 28 String mobile = ServletRequestUtils.getRequiredStringParameter(request,"mobile"); 29 SmsCodeSender smsCodeSender = new DefaultSmsCodeSender(); 30 smsCodeSender.send(mobile,smsCode.getCode()); 31 } 32 }
⒋放行驗證碼的Rest地址
⒌修改登錄表單
1 <h3>短信登陸</h3> 2 <form action="/authentication/mobile" method="post"> 3 <table> 4 <tr> 5 <td>手機號碼:</td> 6 <td><input type="text" name="mobile" value="13800138000"></td> 7 </tr> 8 <tr> 9 <td>短信驗證碼:</td> 10 <td> 11 <input type="text" name="smsCode"> 12 <a href="/code/sms?mobile=13800138000"/> 13 </td> 14 </tr> 15 <tr> 16 <td colspan="2"><button type="submit">登錄</button></td> 17 </tr> 18 </table> 19 </form>
⒍
⒎
SpringSecurity實現短信登錄功能