1. 程式人生 > >SpringSecurity實現短信登錄功能

SpringSecurity實現短信登錄功能

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實現短信登錄功能