Переглянути джерело

通过openId获取token等信息

chenyongxing 6 роки тому
батько
коміт
594b661983

+ 23 - 79
common/common-entity/src/main/java/com/yihu/jw/entity/base/login/BaseLoginLogDO.java

@ -1,6 +1,7 @@
package com.yihu.jw.entity.base.login;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.*;
@ -13,40 +14,13 @@ import java.util.Date;
@Table(name = "base_login_log")
public class BaseLoginLogDO extends UuidIdentityEntity implements java.io.Serializable {
	private String loginType;//'1 短信登录  2 密码登录'
	private String userId;//'登录用户主键 患者code或者医生code'
	private String saasId;//'saas配置id'
	private String userType;//'1 患者 2医生 '
	private Date createTime;
	private Integer tokenId;//'tokenid'
	private String type;//'1 成功 2失败'
	private String errorMessage;//'错误信息'
	private String phone;//'电话号码'
	private String userAgent;//wlyyusersimple json串
	private String openid;//微信openid
	private String loginType;
	// Constructors
	/** default constructor */
	public BaseLoginLogDO() {
	}
	/** minimal constructor */
	public BaseLoginLogDO(Integer id, Date createTime) {
		this.createTime = createTime;
	}
	@Column(name = "login_type", length = 2)
	public String getLoginType() {
		return this.loginType;
	}
	public void setLoginType(String loginType) {
		this.loginType = loginType;
	}
	@Column(name = "user_id", length = 100)
	@Column(name="user_id")
	public String getUserId() {
		return userId;
	}
@ -55,70 +29,40 @@ public class BaseLoginLogDO extends UuidIdentityEntity implements java.io.Serial
		this.userId = userId;
	}
	@Column(name = "saas_id", length = 100)
	public String getSaasId() {
		return this.saasId;
	}
	public void setSaasId(String saasId) {
		this.saasId = saasId;
	}
	@Column(name = "user_type", length = 2)
	public String getUserType() {
		return this.userType;
	}
	public void setUserType(String userType) {
		this.userType = userType;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "create_time", nullable = false, length = 0)
	@Column(name="create_time")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	public Date getCreateTime() {
		return this.createTime;
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Column(name = "token_id")
	public Integer getTokenId() {
		return this.tokenId;
	@Column(name="user_agent")
	public String getUserAgent() {
		return userAgent;
	}
	public void setTokenId(Integer tokenId) {
		this.tokenId = tokenId;
	public void setUserAgent(String userAgent) {
		this.userAgent = userAgent;
	}
	@Column(name = "type", length = 1)
	public String getType() {
		return this.type;
	@Column(name="openid")
	public String getOpenid() {
		return openid;
	}
	public void setType(String type) {
		this.type = type;
	public void setOpenid(String openid) {
		this.openid = openid;
	}
	@Column(name = "error_message", length = 1000)
	public String getErrorMessage() {
		return this.errorMessage;
	}
	public void setErrorMessage(String errorMessage) {
		this.errorMessage = errorMessage;
	}
	@Column(name = "phone", length = 20)
	public String getPhone() {
		return this.phone;
	@Column(name="login_type")
	public String getLoginType() {
		return loginType;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	public void setLoginType(String loginType) {
		this.loginType = loginType;
	}
}

+ 9 - 0
server/svr-authentication/pom.xml

@ -109,6 +109,15 @@
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-rest-model</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-entity</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>mysql-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>

+ 15 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/login/dao/BaseLoginLogDao.java

@ -0,0 +1,15 @@
package com.yihu.jw.security.login.dao;
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface BaseLoginLogDao extends PagingAndSortingRepository<BaseLoginLogDO, String>, JpaSpecificationExecutor<BaseLoginLogDO> {
    @Query("from BaseLoginLogDO where openid=? order by create_time desc")
    List<BaseLoginLogDO> findByOpenId(String openid);
}

+ 32 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/login/service/BaseLoginLogService.java

@ -0,0 +1,32 @@
package com.yihu.jw.security.login.service;
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import com.yihu.jw.security.login.dao.BaseLoginLogDao;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Service
public class BaseLoginLogService<T, R extends CrudRepository> extends BaseJpaService<BaseLoginLogDO, BaseLoginLogDao> {
    @Autowired
    private BaseLoginLogDao baseLoginLogDao;
    /**
     * 根据openid 获取最新的一条数据
     * @param openid
     * @return
     */
    public BaseLoginLogDO findByOpenId(String openid) {
        List<BaseLoginLogDO> loginLogs = baseLoginLogDao.findByOpenId(openid);
        if(!CollectionUtils.isEmpty(loginLogs)){
            return loginLogs.get(0);
        }
        return null;
    }
}

+ 1 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/model/WlyyUserSimple.java

@ -23,7 +23,7 @@ WlyyUserSimple implements Serializable {
        female
    }
    private String id;
    private String id; //对应患者,医生等表中的id字段
    //用户名
    private String username;
    //姓名

+ 44 - 3
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java

@ -1,8 +1,10 @@
package com.yihu.jw.security.oauth2.provider.endpoint;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.security.core.userdetails.jdbc.WlyyUserDetailsService;
import com.yihu.jw.security.login.service.BaseLoginLogService;
import com.yihu.jw.security.model.*;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter;
@ -85,6 +87,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
    private WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private BaseLoginLogService baseLoginLogService;
    @PostConstruct
    private void init() {
@ -158,11 +162,12 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        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");
        //更新患者openId
        if(!StringUtils.isEmpty(openid) && !"undefined".equalsIgnoreCase(openid) && "3".equalsIgnoreCase(loginType)){
        BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
        if(!StringUtils.isEmpty(openid) && !"undefined".equalsIgnoreCase(openid) && "3".equals(loginType)){
            baseLoginLogDO.setOpenid(openid);
            userDetailsService.updateOpenId(openid,wlyyUserSimple.getId());
        }
        if (parameters.get("password") != null) {
@ -170,6 +175,14 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
            userDetailsService.addFailureCount(username,0);
        }
        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 getResponse(wlyyUserSimple);
    }
@ -214,6 +227,24 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        return getResponse(wlyyUserSimple);
    }
    /**
     *
     * @param openid
     * @return
     */
    @RequestMapping(value = "/oauth/getByOpenId", method = RequestMethod.POST)
    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> getByOpenId( @RequestParam(value = "openid", required = true) String openid) {
        BaseLoginLogDO loginLog = baseLoginLogService.findByOpenId(openid);
        if(loginLog== null){
            throw new UsernameNotFoundException("can't find login log by openod: "+openid);
        }
        String userAgent = loginLog.getUserAgent();
        WlyyUserSimple wlyyUserSimple = JSONObject.parseObject(userAgent, WlyyUserSimple.class);
//        String accessToken = wlyyUserSimple.getAccessToken();
//        OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessToken);
        return getResponse(wlyyUserSimple);
    }
    /**
     * 登出
     * @param parameters
@ -466,7 +497,17 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
            String loginType = parameters.get("login_type");
            userDetailsService.setRolePhth(loginType,token,wlyyUserSimple.getId(),redisTemplate);
            BaseLoginLogDO baseLoginLogDO = new BaseLoginLogDO();
            baseLoginLogDO.setUserId(wlyyUserSimple.getId());
            baseLoginLogDO.setCreateTime(new Date());
            String userAgent = JSONObject.toJSONString(wlyyUserSimple);
            baseLoginLogDO.setUserAgent(userAgent);
            baseLoginLogDO.setLoginType(loginType);
            String openid = parameters.get("openid");
            if(!StringUtils.isEmpty(openid) && "undefined".equalsIgnoreCase(openid)){
                baseLoginLogDO.setOpenid(openid);
            }
            baseLoginLogService.save(baseLoginLogDO);
            return getResponse(wlyyUserSimple);
        }
        return null;