| 
					
				 | 
			
			
				@ -3,6 +3,7 @@ package com.yihu.jw.security.oauth2.provider.endpoint; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.util.ConstantUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.ResultStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.security.exception.ImgCaptchaException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.security.model.Captcha; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.security.model.Oauth2Envelop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -13,6 +14,7 @@ import io.swagger.annotations.ApiOperation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.redis.core.StringRedisTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.http.HttpHeaders; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.http.HttpStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.http.ResponseEntity; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -47,6 +49,8 @@ public class WlyyIotLoginEndpoint { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private IotSMSService iotSMSService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private UserService userService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private StringRedisTemplate redisTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @RequestMapping(value = "/oauth/sendIotCaptcha", method = RequestMethod.GET) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @ApiOperation("发送短信验证码") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -59,6 +63,15 @@ public class WlyyIotLoginEndpoint { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isEmpty(mobile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new InvalidRequestException("username"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //图形验证码验证 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String key = parameters.get("key"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String text = parameters.get("text"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(!verifyCaptcha(key,text)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new ImgCaptchaException("图形验证码错误!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //验证请求间隔超时,防止频繁获取验证码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (!wlyyRedisVerifyCodeService.isIntervalTimeout(client_id, mobile)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new IllegalAccessException("SMS request frequency is too fast"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -82,6 +95,19 @@ public class WlyyIotLoginEndpoint { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        throw new IllegalStateException("验证码发送失败!result:"+ result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean verifyCaptcha(String key,String text){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        boolean pass = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(key)||StringUtils.isEmpty(text)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String captcha = redisTemplate.opsForValue().get(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (org.apache.commons.lang3.StringUtils.isNotBlank(captcha)&& captcha.equals(text.toLowerCase())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pass = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            redisTemplate.delete(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return pass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @RequestMapping(value = "/oauth/captchaAndRegister", method = RequestMethod.POST) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @ApiOperation("验证短信验证码并注册") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public ResponseEntity<Oauth2Envelop> captchaCheck(@RequestParam Map<String, String> parameters) throws Exception { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -98,6 +124,15 @@ public class WlyyIotLoginEndpoint { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isEmpty(captcha)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new InvalidRequestException("captcha"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //图形验证码验证 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String key = parameters.get("key"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String text = parameters.get("text"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(!verifyCaptcha(key,text)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new ImgCaptchaException("图形验证码错误!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Oauth2Envelop<Boolean> oauth2Envelop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //判断当前手机号是否注册过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Boolean b = userService.isRegisterUserName(mobile); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -112,7 +147,7 @@ public class WlyyIotLoginEndpoint { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    oauth2Envelop = new Oauth2Envelop<>(jsonObject.getString("msg"), ResultStatus.INVALID_GRANT, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                oauth2Envelop = new Oauth2Envelop<>("验证码错误", ResultStatus.INVALID_GRANT, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                oauth2Envelop = new Oauth2Envelop<>("短信验证码错误", ResultStatus.INVALID_GRANT, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        HttpHeaders headers = new HttpHeaders(); 
			 |