You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.1 KiB
48 lines
2.1 KiB
package cc.bnblogs.springsecurity.controller; |
|
|
|
import cc.bnblogs.springsecurity.pojo.SmsCode; |
|
import cc.bnblogs.springsecurity.utils.ImageCodeUtils; |
|
import cc.bnblogs.springsecurity.validate.imagecode.ImageCode; |
|
import org.apache.commons.lang3.RandomStringUtils; |
|
import org.springframework.social.connect.web.HttpSessionSessionStrategy; |
|
import org.springframework.social.connect.web.SessionStrategy; |
|
import org.springframework.web.bind.annotation.GetMapping; |
|
import org.springframework.web.bind.annotation.RestController; |
|
import org.springframework.web.context.request.ServletWebRequest; |
|
|
|
import javax.imageio.ImageIO; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
import java.io.IOException; |
|
|
|
@RestController |
|
public class ValidateCodeController { |
|
|
|
public final static String SESSION_KEY_IMAGE_CODE = "SESSION_KEY_IMAGE_CODE"; |
|
public final static String SESSION_KEY_SMS_CODE = "SESSION_KEY_SMS_CODE"; |
|
|
|
|
|
private final SessionStrategy sessionStrategy = new HttpSessionSessionStrategy(); |
|
|
|
@GetMapping("/code/image") |
|
public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException { |
|
ImageCode imageCode = ImageCodeUtils.createImageCode(); |
|
// 将ImageCode对象保存到Session中 |
|
sessionStrategy.setAttribute(new ServletWebRequest(request), SESSION_KEY_IMAGE_CODE, imageCode); |
|
// 通过IO流将生成的图片输出到登录页面上 |
|
ImageIO.write(imageCode.getImage(), "jpeg", response.getOutputStream()); |
|
} |
|
|
|
@GetMapping("/code/sms") |
|
public void createSmsCode(HttpServletRequest request, String mobile) { |
|
SmsCode smsCode = createSMSCode(); |
|
sessionStrategy.setAttribute(new ServletWebRequest(request), SESSION_KEY_SMS_CODE + mobile, smsCode); |
|
// 输出验证码到控制台代替短信发送服务 |
|
System.out.println("您的登录验证码为:" + smsCode.getCode() + ",有效时间为60秒"); |
|
} |
|
|
|
private SmsCode createSMSCode() { |
|
String code = RandomStringUtils.randomNumeric(6); |
|
return new SmsCode(code, 60); |
|
} |
|
} |