chenxz il y a 7 ans
Parent
commit
c7135ede69

+ 20 - 0
mooctest-user-server/pom.xml

@@ -32,6 +32,11 @@
             <version>0.0.1</version>
         </dependency>
         <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <version>${spring.boot.version}</version>
@@ -166,6 +171,21 @@
             <artifactId>disruptor</artifactId>
             <version>3.3.2</version>
         </dependency>
+        <dependency>
+            <groupId>net.dongliu</groupId>
+            <artifactId>requests</artifactId>
+            <version>4.7.3</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.iselab</groupId>
+            <artifactId>ronglian-sms</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.4.1</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 71 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/data/Token.java

@@ -0,0 +1,71 @@
+package cn.iselab.mooctest.user.data;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午4:38 2018/4/2
+ * @Modified By:
+ */
+public class Token {
+
+    // 接口访问凭证
+    private String accessToken;
+    // 凭证有效期,单位:秒
+    private int expiresIn;
+    private Long createTime;
+
+    private String refresh_token;
+
+    private String openId;
+
+    public Token() {
+        createTime = System.currentTimeMillis();
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public int getExpiresIn() {
+        return expiresIn;
+    }
+
+    public void setExpiresIn(int expiresIn) {
+        this.expiresIn = expiresIn;
+    }
+
+    public boolean isValid() {
+        if ((System.currentTimeMillis() - createTime) < (expiresIn - 100) * 1000) {
+            return true;
+        }
+        return false;
+    }
+
+    public String getRefresh_token() {
+        return refresh_token;
+    }
+
+    public void setRefresh_token(String refresh_token) {
+        this.refresh_token = refresh_token;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+}

+ 33 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/data/UserInfo.java

@@ -0,0 +1,33 @@
+package cn.iselab.mooctest.user.data;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午8:57 2018/4/2
+ * @Modified By:
+ */
+@Data
+public class UserInfo {
+
+    private String openid;
+
+    private String nickname;
+
+    private String sex;
+
+    private String headimgurl;
+
+    private String unionid;
+
+    private String country;
+
+    private String province;
+
+    private List<String> privilege;
+
+    private String city;
+}

+ 58 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserMapper.java

@@ -0,0 +1,58 @@
+package cn.iselab.mooctest.user.mapper;
+
+import cn.iselab.mooctest.user.model.User;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+/**
+ * @author sean
+ * @date 2018-03-04.
+ */
+public interface UserMapper {
+
+    @Select("SELECT * FROM user WHERE id = #{id}")
+    User findById(Long id);
+
+    @Select("SELECT * FROM user WHERE email = #{email}")
+    User findByEmail(String email);
+
+    @Select("SELECT * FROM user WHERE mobile = #{mobile}")
+    User findByMobile(String mobile);
+
+    @Insert("INSERT INTO user(name, password, email) VALUES(#{name}, #{password}, #{email})")
+    void insert(User user);
+
+    @Update("UPDATE user SET name=#{name} WHERE id=#{id}")
+    void updateName(User user);
+
+    @Update("UPDATE user SET school=#{school}, province=#{province}, city=#{city} WHERE id=#{id}")
+    void updateAddress(User user);
+
+    @Update("UPDATE user SET email=#{email} WHERE id=#{id}")
+    void updateEmail(User user);
+
+    @Update("UPDATE user SET mobile=#{mobile} WHERE id=#{id}")
+    void updateMobile(User user);
+
+    @Update("UPDATE user SET photo_url=#{photoUrl} WHERE id=#{id}")
+    void updatePhotoUrl(User user);
+
+    @Update("UPDATE user SET password=#{password} WHERE id=#{id}")
+    void updatePassword(User user);
+
+    @Update("UPDATE user SET availability=#{availability} WHERE id=#{id}")
+    void updateAvailability(User user);
+
+    @Select("SELECT * FROM user WHERE name LIKE concat('%',#{username},'%')")
+    List<User> findByFuzzyName(String name);
+
+    @Select("SELECT * FROM user WHERE email LIKE concat('%',#{username},'%')")
+    List<User> findByFuzzyEmail(String email);
+
+    @Select("SELECT * FROM user WHERE name LIKE concat('%',#{keyword},'%') OR email LIKE CONCAT('%',#{keyword},'%')")
+    List<User> findByFuzzyNameOrEmail(String keyword);
+}

+ 129 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/HttpClientUtils.java

@@ -0,0 +1,129 @@
+package cn.iselab.mooctest.user.util;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.ssl.TrustStrategy;
+import ytx.org.apache.http.conn.ssl.X509HostnameVerifier;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.security.GeneralSecurityException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午8:25 2018/4/2
+ * @Modified By:
+ */
+public class HttpClientUtils {
+
+    public static final int connTimeout=10000;
+    public static final int readTimeout=10000;
+    public static final String charset="UTF-8";
+    private static HttpClient client = null;
+
+    static {
+        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
+        cm.setMaxTotal(128);
+        cm.setDefaultMaxPerRoute(128);
+        client = HttpClients.custom().setConnectionManager(cm).build();
+    }
+
+    public static String get(String url, String charset) throws Exception {
+        return get(url, charset, connTimeout, readTimeout);
+    }
+
+    public static String get(String url, String charset, Integer connTimeout,Integer readTimeout)
+            throws ConnectTimeoutException,SocketTimeoutException, Exception {
+
+        HttpClient client = null;
+        HttpGet get = new HttpGet(url);
+        String result = "";
+        try {
+            // 设置参数
+            RequestConfig.Builder customReqConf = RequestConfig.custom();
+            if (connTimeout != null) {
+                customReqConf.setConnectTimeout(connTimeout);
+            }
+            if (readTimeout != null) {
+                customReqConf.setSocketTimeout(readTimeout);
+            }
+            get.setConfig(customReqConf.build());
+
+            HttpResponse res = null;
+
+            if (url.startsWith("https")) {
+                // 执行 Https 请求.
+                client = createSSLInsecureClient();
+                res = client.execute(get);
+            } else {
+                // 执行 Http 请求.
+                client = HttpClientUtils.client;
+                res = client.execute(get);
+            }
+
+            result = IOUtils.toString(res.getEntity().getContent(), charset);
+        } finally {
+            get.releaseConnection();
+            if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
+                ((CloseableHttpClient) client).close();
+            }
+        }
+        return result;
+    }
+
+    private static CloseableHttpClient createSSLInsecureClient() throws GeneralSecurityException {
+        try {
+            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                    return true;
+                }
+            }).build();
+
+            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
+
+                @Override
+                public boolean verify(String arg0, SSLSession arg1) {
+                    return true;
+                }
+
+                @Override
+                public void verify(String host, SSLSocket ssl)
+                        throws IOException {
+                }
+
+                @Override
+                public void verify(String host, X509Certificate cert)
+                        throws SSLException {
+                }
+
+                @Override
+                public void verify(String host, String[] cns,
+                                   String[] subjectAlts) throws SSLException {
+                }
+
+            });
+
+            return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+
+        } catch (GeneralSecurityException e) {
+            throw e;
+        }
+    }
+
+}

+ 64 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/WechatUtil.java

@@ -0,0 +1,64 @@
+package cn.iselab.mooctest.user.util;
+
+import cn.iselab.mooctest.user.data.Token;
+import cn.iselab.mooctest.user.data.UserInfo;
+import com.google.gson.Gson;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午4:41 2018/4/2
+ * @Modified By:
+ */
+public class WechatUtil {
+
+    protected final static Logger LOG = LoggerFactory.getLogger(WechatUtil.class);
+
+    public final static String base_url="https://api.weixin.qq.com/sns/";
+
+    public final static String token_url=base_url+"oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+
+    public final static String refresh_url=base_url+"oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN";
+
+    public final static String user_info_url=base_url+"userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
+
+    public static Token getToken(String appId, String appSecret, String code) {
+        Token token = new Token();
+        String result="";
+        try {
+            String url = token_url.replace("APPID", appId).replace("SECRET", appSecret).replace("CODE", code);
+            result = HttpClientUtils.get(url.toString(), "UTF-8");
+        }catch (Exception e){
+            LOG.error("获取token失败:"+e.getMessage());
+        }
+        JSONObject object=new JSONObject(result);
+        try {
+            System.out.println(object);
+            token.setAccessToken(object.getString("access_token"));
+            token.setExpiresIn(object.getInt("expires_in"));
+            token.setRefresh_token(object.getString("refresh_token"));
+            token.setOpenId(object.getString("openid"));
+        }catch (Exception e){
+            LOG.error("获取token失败 errcode:" + object.getInt("errcode") + " errmsg:" + object.getString("errmsg"));
+        }
+        return token;
+    }
+
+
+
+    public static UserInfo getWxUser(String accessToken, String openid){
+        Gson gson=new Gson();
+        String result="";
+        try {
+            String url = user_info_url.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openid);
+            result = HttpClientUtils.get(url.toString(), "UTF-8");
+        }catch (Exception e){
+            LOG.error("获取token失败:"+e.getMessage());
+        }
+        UserInfo userInfo=gson.fromJson(result,UserInfo.class);
+        return userInfo;
+    }
+}

+ 8 - 1
mooctest-user-server/src/main/resources/application.yaml

@@ -31,7 +31,7 @@ spring:
         password: zhangxin
     dubbo:
         application.name: user-service-provider
-        registry.address: zookeeper://118.178.131.206:2181
+        registry.address: zookeeper://127.0.0.1:2181
         protocol.name: dubbo
         protocol.port: 20900
 #        protocol.host: 127.0.0.1
@@ -43,6 +43,13 @@ spring:
 server:
     port: 8081
 
+
+mybatis:
+    typeAliasesPackage: cn.iselab.mooctest.user.model
+    configuration:
+        map-underscore-to-camel-case: true
+
+
 logging.config: classpath:log4j2.yaml
 
 ---