|  | @ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  | 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.auth.OauthRsaKeyDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.login.BaseLoginLogDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.patient.BasePatientDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.ylzinfo.OauthYlzConfigDO;
 | 
	
	
		
			
				|  | @ -18,10 +19,7 @@ import com.yihu.jw.security.model.*;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.oauth2.provider.error.WlyyOAuth2ExceptionTranslator;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.service.OauthCaConfigSerivce;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.service.OauthWjwConfigService;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.service.OauthWlyyConfigService;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.service.OauthYlzConfigService;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.service.*;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.utils.AES;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.utils.DateUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.security.utils.SerializeUtil;
 | 
	
	
		
			
				|  | @ -126,6 +124,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
 | 
	
		
			
				|  |  |     private OauthCaConfigSerivce oauthCaConfigSerivce;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private OauthWjwConfigService oauthWjwConfigService;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private OauthSsoService oauthSsoService;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @PostConstruct
 | 
	
	
		
			
				|  | @ -1085,4 +1085,83 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return pass;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/oauth/getSsoPublicKey", method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ApiOperation("获取通用公钥")
 | 
	
		
			
				|  |  |     public ObjEnvelop getSsoPublicKey(String code,String appId)throws Exception{
 | 
	
		
			
				|  |  |         return ObjEnvelop.getSuccess("success",oauthSsoService.getSsoPublic(code,appId));
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/oauth/test", method = RequestMethod.GET)
 | 
	
		
			
				|  |  |     @ApiOperation("test")
 | 
	
		
			
				|  |  |     public ObjEnvelop test()throws Exception{
 | 
	
		
			
				|  |  |         return ObjEnvelop.getSuccess("success",oauthSsoService.getAuthCode());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/oauth/ssoPatientLogin", method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     public ObjEnvelop ssoPatientLogin(String authCode,String client_id,String code,String appId,String login_type){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(client_id)) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("client_id is null");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(authCode)) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("authCode is null");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(code)) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("code is null");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if (StringUtils.isEmpty(appId)) {
 | 
	
		
			
				|  |  |             throw new InvalidRequestException("appId is null");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             logger.info("authCode :"+authCode);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             BasePatientDO patientDO = oauthSsoService.savePatient(code,appId,authCode);
 | 
	
		
			
				|  |  |             if(patientDO == null){
 | 
	
		
			
				|  |  |                 return ObjEnvelop.getError("授权登录失败!");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             Map<String, String> parameters = new HashedMap();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             parameters.put("username",patientDO.getIdcard());
 | 
	
		
			
				|  |  |             parameters.put("grant_type", "ihealthCode");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
 | 
	
		
			
				|  |  |             if (authenticatedClient != null) {
 | 
	
		
			
				|  |  |                 oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
 | 
	
		
			
				|  |  |             if (token == null) {
 | 
	
		
			
				|  |  |                 throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             WlyyUserSimple wlyyUserSimple = userDetailsService.authSuccess(parameters.get("username"));
 | 
	
		
			
				|  |  |             wlyyUserSimple.setAccessToken(token.getValue());
 | 
	
		
			
				|  |  |             wlyyUserSimple.setTokenType(token.getTokenType());
 | 
	
		
			
				|  |  |             wlyyUserSimple.setExpiresIn(token.getExpiresIn());
 | 
	
		
			
				|  |  |             wlyyUserSimple.setRefreshToken(token.getRefreshToken().getValue());
 | 
	
		
			
				|  |  |             wlyyUserSimple.setUser(parameters.get("username"));
 | 
	
		
			
				|  |  |             String loginType = parameters.get("login_type");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
 | 
	
		
			
				|  |  |             userDetailsService.setRolePhth(loginType, token, wlyyUserSimple.getId(), redisTemplate);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             baseLoginLogDO.setUserId(wlyyUserSimple.getId());
 | 
	
		
			
				|  |  |             baseLoginLogDO.setCreateTime(new Date());
 | 
	
		
			
				|  |  |             String userAgent = JSONObject.toJSONString(wlyyUserSimple);
 | 
	
		
			
				|  |  |             baseLoginLogDO.setUserAgent(userAgent);
 | 
	
		
			
				|  |  |             baseLoginLogDO.setLoginType(loginType);
 | 
	
		
			
				|  |  |             baseLoginLogService.save(baseLoginLogDO);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return ObjEnvelop.getSuccess("success",wlyyUserSimple);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             logger.error(e);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return ObjEnvelop.getError("登录失败!");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |