|
@ -0,0 +1,170 @@
|
|
|
package com.yihu.jw.security.oauth2.provider.endpoint;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.restmodel.web.ObjEnvelop;
|
|
|
import com.yihu.jw.security.core.userdetails.jdbc.WlyyUserDetailsService;
|
|
|
import com.yihu.jw.security.dao.doctor.BaseDoctorDao;
|
|
|
import com.yihu.jw.security.login.service.BaseLoginLogService;
|
|
|
import com.yihu.jw.security.model.WlyyUserSimple;
|
|
|
import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter;
|
|
|
import com.yihu.jw.security.service.YkyyService;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
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.security.authentication.AuthenticationManager;
|
|
|
import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
|
|
import org.springframework.security.oauth2.common.exceptions.InvalidRequestException;
|
|
|
import org.springframework.security.oauth2.common.exceptions.UnsupportedGrantTypeException;
|
|
|
import org.springframework.security.oauth2.provider.*;
|
|
|
import org.springframework.security.oauth2.provider.endpoint.AbstractEndpoint;
|
|
|
import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestFactory;
|
|
|
import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestValidator;
|
|
|
import org.springframework.util.Assert;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
import java.util.Date;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* Created by yeshijie on 2020/4/24.
|
|
|
*
|
|
|
* @author yeshijie.
|
|
|
*/
|
|
|
@Api(description = "眼科医院")
|
|
|
@RestController
|
|
|
public class WlyyYkyyEndpoint extends AbstractEndpoint {
|
|
|
|
|
|
private final Logger LOG = LoggerFactory.getLogger(getClass());
|
|
|
|
|
|
private OAuth2RequestFactory oAuth2RequestFactory;
|
|
|
private OAuth2RequestValidator oAuth2RequestValidator = new DefaultOAuth2RequestValidator();
|
|
|
@Autowired
|
|
|
private YkyyService ykyyService;
|
|
|
@Autowired
|
|
|
private WlyyUserDetailsService userDetailsService;
|
|
|
@Autowired
|
|
|
private RestTemplate restTemplate;
|
|
|
@Autowired
|
|
|
private BaseDoctorDao doctorDao;
|
|
|
@Autowired
|
|
|
private ClientDetailsService clientDetailsService;
|
|
|
@Autowired
|
|
|
private StringRedisTemplate redisTemplate;
|
|
|
@Autowired
|
|
|
private BaseLoginLogService baseLoginLogService;
|
|
|
@Autowired
|
|
|
private AuthenticationManager authenticationManager;
|
|
|
@Autowired
|
|
|
private WlyyTokenGranter tokenGranter;
|
|
|
|
|
|
|
|
|
@PostConstruct
|
|
|
private void init() {
|
|
|
super.setTokenGranter(tokenGranter);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 眼科医生登录
|
|
|
* @param verifyCode
|
|
|
* @param client_id
|
|
|
* @param login_type 用户类型 1或默认为user,2:医生登录
|
|
|
* @return
|
|
|
*/
|
|
|
@RequestMapping(value = "/oauth/ykyyDoctorLogin", method = RequestMethod.POST)
|
|
|
public ObjEnvelop ykyyDoctorLogin(String verifyCode, String client_id,String login_type) {
|
|
|
|
|
|
if (StringUtils.isEmpty(client_id)) {
|
|
|
throw new InvalidRequestException("client_id is null");
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isEmpty(login_type)) {
|
|
|
throw new InvalidRequestException("login_type is null");
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
logger.info("verifyCode :"+verifyCode);
|
|
|
|
|
|
String data = ykyyService.getDoctorInfoByVerifycode(verifyCode);
|
|
|
JSONObject jsonObject = JSONObject.parseObject(data);
|
|
|
if(!jsonObject.getString("code").equalsIgnoreCase("10000")){
|
|
|
logger.info(jsonObject.getString("message"));
|
|
|
return ObjEnvelop.getError("授权登录失败!");
|
|
|
}
|
|
|
JSONObject value = jsonObject.getJSONObject("value");
|
|
|
String doctorId = value.getString("doctorId");
|
|
|
String tel = value.getString("tel");
|
|
|
String idCard = value.getString("idCard");
|
|
|
String loginId = value.getString("loginId");
|
|
|
|
|
|
// String idCard = "352103197207090030";
|
|
|
|
|
|
BaseDoctorDO doctorDO = doctorDao.findByIdcard(idCard);
|
|
|
if(doctorDO == null){
|
|
|
return ObjEnvelop.getError("授权登录失败!");
|
|
|
}
|
|
|
|
|
|
ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
|
|
|
|
|
|
Map<String, String> parameters = new HashedMap();
|
|
|
|
|
|
parameters.put("username", idCard);
|
|
|
parameters.put("grant_type", "ihealthDcotor");
|
|
|
|
|
|
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("登录失败!");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected TokenGranter getTokenGranter() {
|
|
|
return this.tokenGranter;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void afterPropertiesSet() throws Exception {
|
|
|
Assert.state(clientDetailsService != null, "ClientDetailsService must be provided");
|
|
|
Assert.state(authenticationManager != null, "AuthenticationManager must be provided");
|
|
|
oAuth2RequestFactory = new DefaultOAuth2RequestFactory(clientDetailsService);
|
|
|
}
|
|
|
}
|