| 
															
																@ -2,6 +2,8 @@ package com.yihu.jw.security.oauth2.provider.endpoint; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.alibaba.fastjson.JSONObject; 
															 | 
															
															 | 
															
																import com.alibaba.fastjson.JSONObject; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.fasterxml.jackson.databind.ObjectMapper; 
															 | 
															
															 | 
															
																import com.fasterxml.jackson.databind.ObjectMapper; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import com.google.code.kaptcha.impl.DefaultKaptcha; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import com.google.code.kaptcha.util.Config; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.entity.base.login.BaseLoginLogDO; 
															 | 
															
															 | 
															
																import com.yihu.jw.entity.base.login.BaseLoginLogDO; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.entity.base.patient.BasePatientDO; 
															 | 
															
															 | 
															
																import com.yihu.jw.entity.base.patient.BasePatientDO; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.entity.ylzinfo.OauthYlzConfigDO; 
															 | 
															
															 | 
															
																import com.yihu.jw.entity.ylzinfo.OauthYlzConfigDO; 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -20,6 +22,9 @@ import com.yihu.jw.security.service.OauthYlzConfigService; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.utils.DateUtil; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.utils.DateUtil; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.jw.security.utils.SerializeUtil; 
															 | 
															
															 | 
															
																import com.yihu.jw.security.utils.SerializeUtil; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.yihu.utils.security.RSAUtils; 
															 | 
															
															 | 
															
																import com.yihu.utils.security.RSAUtils; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import io.swagger.annotations.Api; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import io.swagger.annotations.ApiOperation; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import io.swagger.annotations.ApiParam; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.apache.commons.collections.map.HashedMap; 
															 | 
															
															 | 
															
																import org.apache.commons.collections.map.HashedMap; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.slf4j.Logger; 
															 | 
															
															 | 
															
																import org.slf4j.Logger; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.slf4j.LoggerFactory; 
															 | 
															
															 | 
															
																import org.slf4j.LoggerFactory; 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -49,21 +54,24 @@ import org.springframework.web.context.request.RequestContextHolder; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import org.springframework.web.context.request.ServletRequestAttributes; 
															 | 
															
															 | 
															
																import org.springframework.web.context.request.ServletRequestAttributes; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.annotation.PostConstruct; 
															 | 
															
															 | 
															
																import javax.annotation.PostConstruct; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import javax.imageio.ImageIO; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.servlet.http.Cookie; 
															 | 
															
															 | 
															
																import javax.servlet.http.Cookie; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.servlet.http.HttpServletRequest; 
															 | 
															
															 | 
															
																import javax.servlet.http.HttpServletRequest; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.servlet.http.HttpServletResponse; 
															 | 
															
															 | 
															
																import javax.servlet.http.HttpServletResponse; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import javax.servlet.http.HttpSession; 
															 | 
															
															 | 
															
																import javax.servlet.http.HttpSession; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.awt.image.BufferedImage; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.io.ByteArrayOutputStream; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.io.IOException; 
															 | 
															
															 | 
															
																import java.io.IOException; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.security.KeyPair; 
															 | 
															
															 | 
															
																import java.security.KeyPair; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.security.PrivateKey; 
															 | 
															
															 | 
															
																import java.security.PrivateKey; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.security.interfaces.RSAPrivateKey; 
															 | 
															
															 | 
															
																import java.security.interfaces.RSAPrivateKey; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.security.interfaces.RSAPublicKey; 
															 | 
															
															 | 
															
																import java.security.interfaces.RSAPublicKey; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.text.SimpleDateFormat; 
															 | 
															
															 | 
															
																import java.text.SimpleDateFormat; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.util.Date; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.util.HashMap; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.util.Map; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import java.util.UUID; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.util.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import java.util.concurrent.TimeUnit; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																import com.alibaba.fastjson.JSON; 
															 | 
															
															 | 
															
																import com.alibaba.fastjson.JSON; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																import sun.misc.BASE64Encoder; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																/** 
															 | 
															
															 | 
															
																/** 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 * <p> 
															 | 
															
															 | 
															
																 * <p> 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -74,6 +82,7 @@ import com.alibaba.fastjson.JSON; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 * @author Progr1mmer 
															 | 
															
															 | 
															
																 * @author Progr1mmer 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 * @created on 2018/8/29 
															 | 
															
															 | 
															
																 * @created on 2018/8/29 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 */ 
															 | 
															
															 | 
															
																 */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																@Api(description = "认证服务") 
															 | 
														
													
												
													
														
															| 
															 | 
															
																@RestController 
															 | 
															
															 | 
															
																@RestController 
															 | 
														
													
												
													
														
															| 
															 | 
															
																public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
															
															 | 
															
																public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -109,6 +118,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @Autowired 
															 | 
															
															 | 
															
																    @Autowired 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private OauthWlyyConfigService oauthWlyyConfigService; 
															 | 
															
															 | 
															
																    private OauthWlyyConfigService oauthWlyyConfigService; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @PostConstruct 
															 | 
															
															 | 
															
																    @PostConstruct 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    private void init() { 
															 | 
															
															 | 
															
																    private void init() { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        super.setTokenGranter(tokenGranter); 
															 | 
															
															 | 
															
																        super.setTokenGranter(tokenGranter); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -122,6 +132,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     *                    captcha 验证码 
															 | 
															
															 | 
															
																     *                    captcha 验证码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     *                    password 密码 
															 | 
															
															 | 
															
																     *                    password 密码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     *                    username 用户名/手机/身份证号 
															 | 
															
															 | 
															
																     *                    username 用户名/手机/身份证号 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     *                    key 图形验证码键值 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																     *                    text 用户输入的图形验证码 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录 
															 | 
															
															 | 
															
																     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     * @param httpSession 
															 | 
															
															 | 
															
																     * @param httpSession 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     * @return 
															 | 
															
															 | 
															
																     * @return 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -129,6 +141,16 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     */ 
															 | 
															
															 | 
															
																     */ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    @RequestMapping(value = "/oauth/login", method = RequestMethod.POST) 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/login", method = RequestMethod.POST) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> login(@RequestParam Map<String, String> parameters, HttpSession httpSession) throws Exception { 
															 | 
															
															 | 
															
																    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> login(@RequestParam Map<String, String> parameters, HttpSession httpSession) throws Exception { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        //图形验证码验证 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        String key = parameters.get("key"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        String text = parameters.get("text"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        if(org.apache.commons.lang3.StringUtils.isNotBlank(key)&& org.apache.commons.lang3.StringUtils.isNotBlank(text)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            if(!verifyCaptcha(key,text)){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																                throw new InvalidRequestException("img_captcha error"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																            } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        String username = parameters.get("username"); 
															 | 
															
															 | 
															
																        String username = parameters.get("username"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        if (StringUtils.isEmpty(username)) { 
															 | 
															
															 | 
															
																        if (StringUtils.isEmpty(username)) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																            throw new InvalidRequestException("username"); 
															 | 
															
															 | 
															
																            throw new InvalidRequestException("username"); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@ -832,4 +854,49 @@ public class WlyyLoginEndpoint extends AbstractEndpoint { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																        return ObjEnvelop.getSuccess("success",map); 
															 | 
															
															 | 
															
																        return ObjEnvelop.getSuccess("success",map); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																    } 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    @RequestMapping(value = "/oauth/imgCaptcha", method = RequestMethod.GET) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    @ApiOperation("生成验证码") 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    public ObjEnvelop createCaptcha()throws Exception{ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        return ObjEnvelop.getSuccess("success",generateCaptcha()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    private Map<String, String> generateCaptcha() throws IOException { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        DefaultKaptcha captchaProducer = new DefaultKaptcha(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Properties properties = new Properties(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        properties.put("kaptcha.textproducer.font.color", "blue"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        properties.put("kaptcha.textproducer.font.size", "45"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        properties.put("kaptcha.textproducer.char.length", "4"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        properties.put("kaptcha.textproducer.char.string","0123456789QWERTYUIOPLKJHGFDSAZXCVBNM"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Config config = new Config(properties); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        captchaProducer.setConfig(config); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        String captchaText = captchaProducer.createText(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        BufferedImage image = captchaProducer.createImage(captchaText); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        ImageIO.write(image, "png", outputStream); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        String base64Img = new BASE64Encoder().encode(outputStream.toByteArray()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        base64Img = "data:image/jpeg;base64,"+base64Img.replaceAll("\n", "").replaceAll("\r", "");//格式化处理 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        String key = "hwlyy:captcha:" + UUID.randomUUID().toString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        Map<String, String> data = new HashMap<>(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        data.put("key", key); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        data.put("image", base64Img); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        data.put("format", "png"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        redisTemplate.opsForValue().set(key,captchaText.toLowerCase(),5, TimeUnit.MINUTES); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        return data; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    public boolean verifyCaptcha(String key,String text){ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																        boolean pass = 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; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																} 
															 | 
															
															 | 
															
																} 
															 |