|
@ -165,6 +165,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
|
|
|
private WlyyHospitalSysDictDao wlyyhospitalSysdictDao;
|
|
|
@Autowired
|
|
|
private HttpClientUtil httpClientUtil;
|
|
|
@Autowired
|
|
|
private HcyyService hcyyService;
|
|
|
|
|
|
|
|
|
@PostConstruct
|
|
@ -260,136 +262,151 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
|
|
|
*/
|
|
|
@RequestMapping(value = "/oauth/login", method = RequestMethod.POST)
|
|
|
public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> login(@RequestParam Map<String, String> parameters, HttpSession httpSession) throws Exception {
|
|
|
try{
|
|
|
logger.info("login:登录进入1");
|
|
|
//图形验证码验证
|
|
|
String key = parameters.get("key");
|
|
|
String text = parameters.get("text");
|
|
|
|
|
|
logger.info("login:登录进入1");
|
|
|
//图形验证码验证
|
|
|
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 ImgCaptchaException("img_captcha error");
|
|
|
if(org.apache.commons.lang3.StringUtils.isNotBlank(key)&& org.apache.commons.lang3.StringUtils.isNotBlank(text)){
|
|
|
if(!verifyCaptcha(key,text)){
|
|
|
throw new ImgCaptchaException("img_captcha error");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.info("login:登录进入2");
|
|
|
logger.info("login:登录进入2");
|
|
|
|
|
|
String flag = parameters.get("flag");
|
|
|
String flag = parameters.get("flag");
|
|
|
|
|
|
String username = parameters.get("username");
|
|
|
if (StringUtils.isEmpty(username)&&StringUtils.isEmpty(flag)) {
|
|
|
throw new InvalidRequestException("username");
|
|
|
}
|
|
|
String client_id = parameters.get("client_id");
|
|
|
if (StringUtils.isEmpty(client_id)) {
|
|
|
throw new InvalidRequestException("client_id");
|
|
|
}
|
|
|
if("alipay".equals(flag)||"family".equals(flag)){
|
|
|
//支付宝登录||家人登录
|
|
|
parameters.put("grant_type", flag);
|
|
|
String encdata = parameters.get("encdata");
|
|
|
if("alipay".equals(flag)){
|
|
|
encdata = AES.decrypt(encdata);
|
|
|
}else{
|
|
|
encdata = AesEncryptUtils.agDecrypt(encdata);
|
|
|
}
|
|
|
|
|
|
String data[] = encdata.split(":");
|
|
|
username = data[1];
|
|
|
parameters.put("username", username);
|
|
|
}else if (StringUtils.isEmpty(parameters.get("captcha"))) {
|
|
|
parameters.put("grant_type", "password");
|
|
|
//解密密码
|
|
|
if (parameters.get("password") != null) {
|
|
|
KeyPair keyPair = (KeyPair) httpSession.getAttribute("privateKey");
|
|
|
String password = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("password"), keyPair);
|
|
|
parameters.put("password", password);
|
|
|
String username = parameters.get("username");
|
|
|
logger.info(username);
|
|
|
|
|
|
if (StringUtils.isEmpty(username)&&StringUtils.isEmpty(flag)) {
|
|
|
throw new InvalidRequestException("username");
|
|
|
}
|
|
|
String client_id = parameters.get("client_id");
|
|
|
if (StringUtils.isEmpty(client_id)) {
|
|
|
throw new InvalidRequestException("client_id");
|
|
|
}
|
|
|
if("alipay".equals(flag)||"family".equals(flag)){
|
|
|
//支付宝登录||家人登录
|
|
|
parameters.put("grant_type", flag);
|
|
|
String encdata = parameters.get("encdata");
|
|
|
if("alipay".equals(flag)){
|
|
|
encdata = AES.decrypt(encdata);
|
|
|
}else{
|
|
|
encdata = AesEncryptUtils.agDecrypt(encdata);
|
|
|
}
|
|
|
|
|
|
String data[] = encdata.split(":");
|
|
|
username = data[1];
|
|
|
parameters.put("username", username);
|
|
|
}else if (StringUtils.isEmpty(parameters.get("captcha"))) {
|
|
|
parameters.put("grant_type", "password");
|
|
|
//解密密码
|
|
|
if (parameters.get("password") != null) {
|
|
|
KeyPair keyPair = (KeyPair) httpSession.getAttribute("privateKey");
|
|
|
String password = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("password"), keyPair);
|
|
|
parameters.put("password", password);
|
|
|
} else {
|
|
|
//第三方同步账号模式登录
|
|
|
parameters.put("grant_type", "ihealthCode");
|
|
|
}
|
|
|
} else {
|
|
|
//第三方同步账号模式登录
|
|
|
parameters.put("grant_type", "ihealthCode");
|
|
|
parameters.put("grant_type", "captcha");
|
|
|
}
|
|
|
} else {
|
|
|
parameters.put("grant_type", "captcha");
|
|
|
}
|
|
|
logger.info("login:登录进入3");
|
|
|
logger.info("login:登录进入3");
|
|
|
|
|
|
ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
|
|
|
if (null == authenticatedClient) {
|
|
|
throw new InvalidRequestException("client_id");
|
|
|
}
|
|
|
logger.info("login:登录进入4"+authenticatedClient.getClientId());
|
|
|
ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
|
|
|
if (null == authenticatedClient) {
|
|
|
throw new InvalidRequestException("client_id");
|
|
|
}
|
|
|
logger.info("login:登录进入4"+authenticatedClient.getClientId());
|
|
|
|
|
|
TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
|
|
|
oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
|
|
|
OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
|
|
|
if (token == null) {
|
|
|
throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
|
|
|
}
|
|
|
TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
|
|
|
oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
|
|
|
OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
|
|
|
if (token == null) {
|
|
|
throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
|
|
|
}
|
|
|
/*如果是移动端登陆则移除之前的token,
|
|
|
在网关处通过HTTP状态码告知前端是过期(402)还是账号在别处登陆(403),
|
|
|
实现同一账号只能在一处登陆*/
|
|
|
if("1".equals(kickEachOther)){
|
|
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
|
|
if (request.getHeader("login-device") != null && (request.getHeader("login-device").equalsIgnoreCase("mobile")||request.getHeader("login-device").equalsIgnoreCase("pc"))) {
|
|
|
tokenStore.removeAccessToken(token.getValue());
|
|
|
tokenStore.removeRefreshToken(token.getRefreshToken().getValue());
|
|
|
token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
|
|
|
/* if("1".equals(kickEachOther)){
|
|
|
logger.info("");
|
|
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
|
|
if (request.getHeader("login-device") != null && (request.getHeader("login-device").equalsIgnoreCase("mobile")||request.getHeader("login-device").equalsIgnoreCase("pc"))) {
|
|
|
if (tokenStore.readAccessToken(token.getValue())!=null){
|
|
|
tokenStore.removeAccessToken(token.getValue());
|
|
|
tokenStore.removeRefreshToken(token.getRefreshToken().getValue());
|
|
|
token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if (token == null) {
|
|
|
throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
|
|
|
}
|
|
|
}*/
|
|
|
|
|
|
WlyyUserSimple wlyyUserSimple = userDetailsService.authSuccess(parameters.get("username"));
|
|
|
if ("pad".equals(parameters.get("clientType"))&&!("1".equals(wlyyUserSimple.getArchiveType())) ){//医养平板端登录限制
|
|
|
throw new InvalidGrantException("不允许登录该平台");
|
|
|
}
|
|
|
if (token == null) {
|
|
|
throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());
|
|
|
logger.info("wlyyUserSimple::"+wlyyUserSimple);
|
|
|
wlyyUserSimple.setAccessToken(token.getValue());
|
|
|
wlyyUserSimple.setTokenType(token.getTokenType());
|
|
|
wlyyUserSimple.setExpiresIn(token.getExpiresIn());
|
|
|
wlyyUserSimple.setRefreshToken(token.getRefreshToken().getValue());
|
|
|
wlyyUserSimple.setUser(parameters.get("username"));
|
|
|
wlyyUserSimple.setState(parameters.get("state"));
|
|
|
String loginType = parameters.get("login_type");
|
|
|
String openid = parameters.get("openid");
|
|
|
String wechatId = parameters.get("wechatId");
|
|
|
logger.info("login:登录进入7");
|
|
|
//更新患者openId
|
|
|
BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
|
|
|
logger.info("gengxin开始");
|
|
|
if (!StringUtils.isEmpty(openid) && !"undefined".equalsIgnoreCase(openid) && ("3".equals(loginType)||"4".equalsIgnoreCase(loginType))) {
|
|
|
baseLoginLogDO.setOpenid(openid);
|
|
|
logger.info("gengxin进入"+openid);
|
|
|
userDetailsService.updateOpenId(openid, wlyyUserSimple.getId());
|
|
|
if (!StringUtils.isEmpty(wechatId)&& !"undefined".equalsIgnoreCase(wechatId)){
|
|
|
logger.info("gengxin进入"+wechatId);
|
|
|
userDetailsService.updateOpenIdAndWechatId(openid,wlyyUserSimple.getId(),wechatId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
WlyyUserSimple wlyyUserSimple = userDetailsService.authSuccess(parameters.get("username"));
|
|
|
if ("pad".equals(parameters.get("clientType"))&&!("1".equals(wlyyUserSimple.getArchiveType())) ){//医养平板端登录限制
|
|
|
throw new InvalidGrantException("不允许登录该平台");
|
|
|
}
|
|
|
wlyyUserSimple.setAccessToken(token.getValue());
|
|
|
wlyyUserSimple.setTokenType(token.getTokenType());
|
|
|
wlyyUserSimple.setExpiresIn(token.getExpiresIn());
|
|
|
wlyyUserSimple.setRefreshToken(token.getRefreshToken().getValue());
|
|
|
wlyyUserSimple.setUser(parameters.get("username"));
|
|
|
wlyyUserSimple.setState(parameters.get("state"));
|
|
|
String loginType = parameters.get("login_type");
|
|
|
String openid = parameters.get("openid");
|
|
|
String wechatId = parameters.get("wechatId");
|
|
|
logger.info("login:登录进入7");
|
|
|
//更新患者openId
|
|
|
BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
|
|
|
logger.info("gengxin开始");
|
|
|
if (!StringUtils.isEmpty(openid) && !"undefined".equalsIgnoreCase(openid) && ("3".equals(loginType)||"4".equalsIgnoreCase(loginType))) {
|
|
|
baseLoginLogDO.setOpenid(openid);
|
|
|
logger.info("gengxin进入"+openid);
|
|
|
userDetailsService.updateOpenId(openid, wlyyUserSimple.getId());
|
|
|
if (!StringUtils.isEmpty(wechatId)&& !"undefined".equalsIgnoreCase(wechatId)){
|
|
|
logger.info("gengxin进入"+wechatId);
|
|
|
userDetailsService.updateOpenIdAndWechatId(openid,wlyyUserSimple.getId(),wechatId);
|
|
|
if (parameters.get("password") != null) {
|
|
|
//使用密码登录成功后, 更新失败次数为 0
|
|
|
userDetailsService.addFailureCount(username, 0);
|
|
|
}
|
|
|
}
|
|
|
if (parameters.get("password") != null) {
|
|
|
//使用密码登录成功后, 更新失败次数为 0
|
|
|
userDetailsService.addFailureCount(username, 0);
|
|
|
}
|
|
|
|
|
|
userDetailsService.setRolePhth(loginType, token, wlyyUserSimple.getId(), redisTemplate);
|
|
|
logger.info("login:登录进入8");
|
|
|
|
|
|
String clientType = parameters.get("clientType");
|
|
|
baseLoginLogDO.setUserId(wlyyUserSimple.getId());
|
|
|
baseLoginLogDO.setCreateTime(new Date());
|
|
|
String userAgent = JSONObject.toJSONString(wlyyUserSimple);
|
|
|
baseLoginLogDO.setUserAgent(userAgent);
|
|
|
baseLoginLogDO.setLoginType(loginType);
|
|
|
baseLoginLogDO.setName(wlyyUserSimple.getName());
|
|
|
baseLoginLogDO.setClientType(clientType);
|
|
|
baseLoginLogService.save(baseLoginLogDO);
|
|
|
userDetailsService.setRolePhth(loginType, token, wlyyUserSimple.getId(), redisTemplate);
|
|
|
|
|
|
//个推 clientId
|
|
|
String clientId = parameters.get("getuiClientId");
|
|
|
String getuiClientType = parameters.get("getuiClientType");
|
|
|
String padImei = parameters.get("padImei");
|
|
|
//客户端类型 app,wx,pad,pc
|
|
|
userDetailsService.updateInfo(clientId,getuiClientType,padImei,loginType,wlyyUserSimple.getId(),baseLoginLogDO);
|
|
|
logger.info("login:登录进入9");
|
|
|
String clientType = parameters.get("clientType");
|
|
|
baseLoginLogDO.setUserId(wlyyUserSimple.getId());
|
|
|
baseLoginLogDO.setCreateTime(new Date());
|
|
|
String userAgent = JSONObject.toJSONString(wlyyUserSimple);
|
|
|
baseLoginLogDO.setUserAgent(userAgent);
|
|
|
baseLoginLogDO.setLoginType(loginType);
|
|
|
baseLoginLogDO.setName(wlyyUserSimple.getName());
|
|
|
baseLoginLogDO.setClientType(clientType);
|
|
|
baseLoginLogService.save(baseLoginLogDO);
|
|
|
logger.info("login:登录进入10");
|
|
|
|
|
|
/* //个推 clientId
|
|
|
String clientId = parameters.get("getuiClientId");
|
|
|
String getuiClientType = parameters.get("getuiClientType");
|
|
|
String padImei = parameters.get("padImei");
|
|
|
//客户端类型 app,wx,pad,pc
|
|
|
userDetailsService.updateInfo(clientId,getuiClientType,padImei,loginType,wlyyUserSimple.getId(),baseLoginLogDO);
|
|
|
*/
|
|
|
return getResponse(wlyyUserSimple);
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return null;
|
|
|
|
|
|
return getResponse(wlyyUserSimple);
|
|
|
}
|
|
|
|
|
|
|
|
@ -1443,6 +1460,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
|
|
|
return ObjEnvelop.getSuccess("success", xzzxService.getQRCode());
|
|
|
}else if (wechatId.equalsIgnoreCase("xm_ykyy_wx")){
|
|
|
return ObjEnvelop.getSuccess("success", ykyyService.getQRCode());
|
|
|
}else if (wechatId.equalsIgnoreCase("xm_hcyy_wx")){
|
|
|
return ObjEnvelop.getSuccess("success", hcyyService.getQRCode());
|
|
|
}else {
|
|
|
return ObjEnvelop.getSuccess("success", null);
|
|
|
}
|
|
@ -1500,6 +1519,17 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
|
|
|
openId = jsonObject.getString("userJobNum");
|
|
|
jsonObject.put("qrCodeStatus",jsonObject.getString("qrCodeStatus"));
|
|
|
rs.put("code",1000);
|
|
|
}else if (wechatId.equalsIgnoreCase("xm_hcyy_wx")){
|
|
|
rs = hcyyService.getTokeninfo(qrcode);
|
|
|
JSONObject jsonObject = rs.getJSONObject("data");
|
|
|
logger.info("查询登录信息"+rs);
|
|
|
String qrCodeStatus = rs.getString("code");
|
|
|
if(!"10000".equalsIgnoreCase(qrCodeStatus)){
|
|
|
return ObjEnvelop.getSuccess("error",rs);
|
|
|
}
|
|
|
username = jsonObject.getString("idcard");
|
|
|
jsonObject.put("qrCodeStatus","LoginQrCodeBeenScan");
|
|
|
rs.put("code",1000);
|
|
|
}
|
|
|
|
|
|
if (org.apache.commons.lang.StringUtils.isNotBlank(username)){
|
|
@ -2379,6 +2409,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
|
|
|
basePatientDO.setSalt(salt);
|
|
|
basePatientDO.setLocked(0);
|
|
|
basePatientDO.setEnabled(1);
|
|
|
basePatientDO.setVerifyCode(jsonObject.getString("TOKEN"));
|
|
|
basePatientDO.setPatientStatus("1");
|
|
|
basePatientDao.save(basePatientDO);
|
|
|
}else {
|
|
@ -2449,7 +2480,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
|
|
|
basePatientDO1.setName(tel);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
basePatientDO1.setVerifyCode(jsonObject.getString("TOKEN"));
|
|
|
basePatientDO1.setUserId(userId);
|
|
|
basePatientDao.save(basePatientDO1);
|
|
|
/*String familyList = ykyyService.getFamilyList(null,userId);
|