linxk hace 1 semana
padre
commit
2b7e4e1768
Se han modificado 3 ficheros con 297 adiciones y 105 borrados
  1. 104 105
      pom.xml
  2. 159 0
      src/main/java/com/txz/core/AuthService.java
  3. 34 0
      src/main/java/com/txz/core/JacksonConfig.java

+ 104 - 105
pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.0.5.RELEASE</version>
+        <version>2.0.5.RELEASE</version>
     </parent>
     <groupId>com.txz</groupId>
     <modelVersion>4.0.0</modelVersion>
@@ -56,17 +56,17 @@
         </dependency>
 
         <!--redis依赖-->
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-redis</artifactId>-->
-<!--            <version>1.3.8.RELEASE</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-starter-redis</artifactId>-->
+        <!--            <version>1.3.8.RELEASE</version>-->
+        <!--        </dependency>-->
 
-<!--        <dependency>-->
-<!--            <groupId>redis.clients</groupId>-->
-<!--            <artifactId>jedis</artifactId>-->
-<!--            <version>2.9.0</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>redis.clients</groupId>-->
+        <!--            <artifactId>jedis</artifactId>-->
+        <!--            <version>2.9.0</version>-->
+        <!--        </dependency>-->
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -104,23 +104,23 @@
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.apache.commons</groupId>-->
-<!--            <artifactId>commons-lang3</artifactId>-->
-<!--            <version>3.5</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.apache.commons</groupId>-->
+        <!--            <artifactId>commons-lang3</artifactId>-->
+        <!--            <version>3.5</version>-->
+        <!--        </dependency>-->
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-cache</artifactId>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>javax.servlet</groupId>-->
-<!--            <artifactId>javax.servlet-api</artifactId>-->
-<!--            <version>3.1.0</version>-->
-<!--            <scope>provided</scope>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>javax.servlet</groupId>-->
+        <!--            <artifactId>javax.servlet-api</artifactId>-->
+        <!--            <version>3.1.0</version>-->
+        <!--            <scope>provided</scope>-->
+        <!--        </dependency>-->
         <!--MySQL JDBC驱动-->
         <dependency>
             <groupId>mysql</groupId>
@@ -131,7 +131,6 @@
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis-spring</artifactId>
-            <!--            <version>1.3.1</version>-->
             <version>2.0.1</version>
         </dependency>
         <dependency>
@@ -147,7 +146,6 @@
         <dependency>
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
-            <!--  <version>1.1.1</version>-->
             <version>2.0.1</version>
         </dependency>
 
@@ -161,16 +159,14 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <!--            <version>1.2.22</version>-->
             <version>1.2.69</version>
         </dependency>
         <!--阿里 Druid Spring Boot Starter依赖-->
-<!--        <dependency>-->
-<!--            <groupId>com.alibaba</groupId>-->
-<!--            <artifactId>druid-spring-boot-starter</artifactId>-->
-<!--            &lt;!&ndash;            <version>1.1.2</version>&ndash;&gt;-->
-<!--            <version>1.1.10</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.alibaba</groupId>-->
+        <!--            <artifactId>druid-spring-boot-starter</artifactId>-->
+        <!--            <version>1.1.10</version>-->
+        <!--        </dependency>-->
         <!--代码生成器依赖-->
         <dependency>
             <groupId>org.freemarker</groupId>
@@ -183,6 +179,19 @@
             <version>1.3.5</version>
 
         </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.3.2</version>
+        </dependency>
+
         <dependency>
             <groupId>com.github.misterchangray.mybatis.generator.plugins</groupId>
             <artifactId>myBatisGeneratorPlugins</artifactId>
@@ -199,11 +208,11 @@
             <artifactId>springfox-swagger-ui</artifactId>
             <version>2.9.2</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>com.google.collections</groupId>-->
-<!--            <artifactId>google-collections</artifactId>-->
-<!--            <version>1.0</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.google.collections</groupId>-->
+        <!--            <artifactId>google-collections</artifactId>-->
+        <!--            <version>1.0</version>-->
+        <!--        </dependency>-->
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>swagger-bootstrap-ui</artifactId>
@@ -230,11 +239,11 @@
         </dependency>
 
         <!--异维科技cloud包依赖-->
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.cloud</groupId>-->
-<!--            <artifactId>spring-cloud-starter-dubbo</artifactId>-->
-<!--            <version>0.2.2.RELEASE</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.cloud</groupId>-->
+        <!--            <artifactId>spring-cloud-starter-dubbo</artifactId>-->
+        <!--            <version>0.2.2.RELEASE</version>-->
+        <!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
@@ -248,11 +257,18 @@
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>cn.hutool</groupId>-->
-<!--            <artifactId>hutool-all</artifactId>-->
-<!--            <version>5.0.1</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>io.jsonwebtoken</groupId>-->
+        <!--            <artifactId>jjwt</artifactId>-->
+        <!--            <version>0.9.1</version>-->
+        <!--        </dependency>-->
+
+        <!--        <dependency>-->
+        <!--            <groupId>cn.hutool</groupId>-->
+        <!--            <artifactId>hutool-all</artifactId>-->
+        <!--            <version>RELEASE</version>-->
+        <!--            <scope>compile</scope>-->
+        <!--        </dependency>-->
 
         <dependency>
             <groupId>org.apache.poi</groupId>
@@ -266,32 +282,28 @@
             <version>1.18.10</version>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>com.qcloud</groupId>-->
-<!--            <artifactId>cos_api</artifactId>-->
-<!--            <version>5.6.8</version>-->
-<!--        </dependency>-->
-
-<!--        <dependency>-->
-<!--            <groupId>org.apache.dubbo</groupId>-->
-<!--            <artifactId>dubbo-registry-nacos</artifactId>-->
-<!--            <version>2.7.1</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.qcloud</groupId>-->
+        <!--            <artifactId>cos_api</artifactId>-->
+        <!--            <version>5.6.8</version>-->
+        <!--        </dependency>-->
 
         <!-- MQ -->
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-amqp</artifactId>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-starter-amqp</artifactId>-->
+        <!--        </dependency>-->
 
         <dependency>
             <groupId>org.apache.rocketmq</groupId>
             <artifactId>rocketmq-spring-boot-starter</artifactId>
         </dependency>
 
+        <!-- Dubbo Spring Boot Starter(升级为2.7.23) -->
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-spring-boot-starter</artifactId>
+            <version>2.7.23</version>
         </dependency>
 
         <!-- dubbo序列化方式 -->
@@ -306,22 +318,25 @@
             <version>0.45</version>
         </dependency>
 
-        <!-- Dubbo -->
+        <!-- Dubbo 核心依赖(升级为2.7.23) -->
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
+            <version>2.7.23</version>
         </dependency>
 
-        <!-- Dubbo Registry Nacos -->
+        <!-- Dubbo Registry Nacos(升级为2.7.23) -->
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-registry-nacos</artifactId>
-            <version>2.7.1</version>
+            <version>2.7.23</version>
         </dependency>
 
+        <!-- Nacos客户端(适配Dubbo 2.7.23,升级为1.4.3) -->
         <dependency>
             <groupId>com.alibaba.nacos</groupId>
             <artifactId>nacos-client</artifactId>
+            <version>1.4.3</version>
             <exclusions>
                 <exclusion>
                     <groupId>com.google.guava</groupId>
@@ -333,27 +348,11 @@
 
     </dependencies>
 
-<!--    <distributionManagement>-->
-<!--        <snapshotRepository>-->
-<!--            <uniqueVersion>false</uniqueVersion>-->
-<!--            <id>nexus-snapshots</id>-->
-<!--            <name>Nexus Snapshot Repository</name>-->
-<!--            <url>http://124.220.229.80:9091/repository/maven-snapshots/</url>-->
-<!--            <layout>default</layout>-->
-<!--        </snapshotRepository>-->
-
-<!--        <repository>-->
-<!--            <id>nexus-releases</id>-->
-<!--            <name>maven-releases</name>-->
-<!--            <url>http://124.220.229.80:9091/repository/maven-releases/</url>-->
-<!--        </repository>-->
-<!--    </distributionManagement>-->
     <distributionManagement>
         <snapshotRepository>
             <id>nexus-snapshots</id>
             <name>Nexus Snapshot Repository</name>
             <url>http://124.220.229.80:9091/repository/maven-snapshots/</url>
-            <!-- 删除uniqueVersion和layout,使用默认值即可 -->
         </snapshotRepository>
 
         <repository>
@@ -382,31 +381,31 @@
     </dependencyManagement>
 
     <build>
-    	<plugins>
-	           <plugin>
-	                <groupId>org.springframework.boot</groupId>
-	                <artifactId>spring-boot-maven-plugin</artifactId>
-                   <configuration>
-                       <classifier>exec</classifier>
-                   </configuration>
-                   <executions>
-                       <execution>
-                           <goals>
-                               <goal>repackage</goal>
-                           </goals>
-                       </execution>
-                   </executions>
-	            </plugin>
-	            <plugin>
-	                <artifactId>maven-compiler-plugin</artifactId>
-	                <configuration>
-	                    <source>${java.version}</source>
-	                    <target>${java.version}</target>
-	                    <encoding>UTF-8</encoding>
-	                </configuration>
-	            </plugin>
-          </plugins>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <classifier>exec</classifier>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 
 
-</project>
+</project>

+ 159 - 0
src/main/java/com/txz/core/AuthService.java

@@ -0,0 +1,159 @@
+//package com.txz.core;
+//
+//import cn.hutool.core.date.DateField;
+//import cn.hutool.core.date.DateUtil;
+//import io.jsonwebtoken.Claims;
+//import io.jsonwebtoken.ExpiredJwtException;
+//import io.jsonwebtoken.Jwts;
+//import io.jsonwebtoken.SignatureAlgorithm;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.lang3.StringUtils;
+//import org.apache.commons.lang3.tuple.ImmutableTriple;
+//import org.apache.commons.lang3.tuple.Triple;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Service;
+//import org.springframework.web.context.request.RequestContextHolder;
+//import org.springframework.web.context.request.ServletRequestAttributes;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import java.util.*;
+//
+//
+//@Service
+//@Slf4j
+//public class AuthService {
+//
+//    private static final String BEARER = "Bearer ";
+//
+//    /**
+//     * jwt token 密钥,主要用于token解析,签名验证
+//     */
+//    @Value("${spring.security.oauth2.jwt.signingKey}")
+//    private static String signingKey = "txz123456";
+//
+//
+//    public String buildJwtToken( Long userId) {
+//        String KEY = "txz123456";
+//        Date now = DateUtil.date();
+//        Date exp = DateUtil.offset(now, DateField.DAY_OF_YEAR,30);
+//        Map<String, Object> claims = new HashMap<String, Object>();
+//        claims.put("userId", userId);
+//
+//        String jwtToken = Jwts.builder()
+//                .setClaims(claims)
+//                .setId(UUID.randomUUID().toString())
+//                .setIssuedAt(now)
+//                .setSubject("sawa")
+//                .signWith(SignatureAlgorithm.HS256, KEY.getBytes())
+//                .setExpiration(exp).compact();
+//
+//        return "Bearer " +jwtToken;
+//    }
+//
+//    public String buildJwtTokenWithRole( Long userId,Integer role, Integer day) {
+//        String KEY = "123456";
+//        Date now = DateUtil.date();
+//        Date exp = DateUtil.offset(now, DateField.DAY_OF_YEAR,day);
+//        Map<String, Object> claims = new HashMap<String, Object>();
+//        claims.put("userId", userId);
+//        claims.put("role", role);
+//
+//        String jwtToken = Jwts.builder()
+//                .setClaims(claims)
+//                .setId(UUID.randomUUID().toString())
+//                .setIssuedAt(now)
+//                .setSubject("sawa")
+//                .signWith(SignatureAlgorithm.HS256, KEY.getBytes())
+//                .setExpiration(exp).compact();
+//
+//        return "Bearer " +jwtToken;
+//    }
+//
+//    public Claims getClaimsFromToken(String authentication) {
+//        try {
+//            final Claims claims = this.getJwt(authentication);
+//            boolean pass = DateUtil.compare(DateUtil.date(),claims.getExpiration()) < 0;
+//            if (pass){
+//                return claims;
+//            }
+//        } catch (Exception e) {
+//            log.error("get userId from token error:{}", e.getMessage());
+//        }
+//        return null;
+//    }
+//
+//
+//    private static Claims getJwt(String jwtToken) {
+//        if (jwtToken.startsWith(BEARER)) {
+//            jwtToken = StringUtils.substring(jwtToken, BEARER.length());
+//        }
+//        Claims claims;
+//        try {
+//            claims = Jwts.parser()  //得到DefaultJwtParser
+//                    .setSigningKey(signingKey.getBytes()) //设置签名的秘钥
+//                    .parseClaimsJws(jwtToken).getBody();
+//        } catch(ExpiredJwtException e) {
+//            claims = e.getClaims();
+//        }
+//
+//        return claims;
+//    }
+//
+//    public Long getTokenUserId(HttpServletRequest request) {
+//        if (request == null){
+//            ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+//            if (null != sra) {
+//                request = sra.getRequest();
+//            } else {
+//                return null;
+//            }
+//        }
+//        String token = request.getHeader("token");
+//        Claims claims = getJwt(token);
+//        return Long.valueOf(claims.get("userId").toString());
+//    }
+//
+//    /**
+//     * 验证 JWT token 的有效性
+//     * @param token 待验证的 token 字符串(可带或不带 "Bearer " 前缀)
+//     * @return 验证结果对象,包含:
+//     *         - 是否有效(boolean)
+//     *         - 如果无效,错误信息(String)
+//     *         - 如果有效,解析出的 Claims 对象(Claims)
+//     */
+//    public Triple<Boolean, String, Claims> verifyToken(String token) {
+//        try {
+//            // 1. 检查token是否为空
+//            if (StringUtils.isBlank(token)) {
+//                return ImmutableTriple.of(false, "Token不能为空", null);
+//            }
+//
+//            // 2. 解析token获取Claims
+//            Claims claims = getJwt(token);
+//
+//            // 3. 检查token是否过期
+//            if (DateUtil.compare(DateUtil.date(), claims.getExpiration()) >= 0) {
+//                return ImmutableTriple.of(false, "Token已过期", claims);
+//            }
+//
+//            // 4. 检查必要字段(根据业务需求)
+//            if (claims.get("userId") == null) {
+//                return ImmutableTriple.of(false, "无效Token: 缺少userId字段", claims);
+//            }
+//
+//            // 5. 所有检查通过,返回有效
+//            return ImmutableTriple.of(true, null, claims);
+//        } catch (ExpiredJwtException e) {
+//            // 专门处理过期异常,可以获取到过期的claims
+//            return ImmutableTriple.of(false, "Token已过期", e.getClaims());
+//        } catch (Exception e) {
+//            log.error("Token验证失败: {}", e.getMessage());
+//            return ImmutableTriple.of(false, "无效Token: " + e.getMessage(), null);
+//        }
+//    }
+//
+//}
+//
+//
+//
+//

+ 34 - 0
src/main/java/com/txz/core/JacksonConfig.java

@@ -0,0 +1,34 @@
+package com.txz.core;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class JacksonConfig {
+
+    @Bean
+    public ObjectMapper objectMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+
+        // 禁用多态类型(适用于所有版本,最安全)
+        mapper.disableDefaultTyping();
+
+        // 若必须启用多态类型(旧版本兼容写法)
+        /*
+        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, 
+            new DefaultBaseTypeLimitingValidator() {
+                @Override
+                public boolean validateBaseType(String baseTypeName, String subTypeName) {
+                    // 白名单逻辑:只允许指定类
+                    return subTypeName.startsWith("com.example.") 
+                        || subTypeName.startsWith("java.lang.")
+                        || subTypeName.startsWith("java.util.");
+                }
+            }
+        );
+        */
+
+        return mapper;
+    }
+}