使用javaparser替换项目中的代码

package com.d1m.common.logs;

import cn.hutool.core.io.FileUtil;
import com.github.javaparser.ParseResult;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.ImportDeclaration;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.TypeDeclaration;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.StringLiteralExpr;
import com.github.javaparser.ast.stmt.IfStmt;
import com.github.javaparser.ast.visitor.ModifierVisitor;
import com.github.javaparser.ast.visitor.Visitable;
import com.github.javaparser.utils.CodeGenerationUtils;
import com.github.javaparser.utils.SourceRoot;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;


/**
 * @ClassName Demo
 * @Description TODO
 * @Author yanqing.liu
 * @Date 2021/6/20 10:41 下午
 * @Version 1.0
 */
public class LogParseV2 {

    /**
     * 项目路径
     */
    public static final String SOURCE_URL = "/Users/liuyanqing/work/estore-core的副本";

    /**
     * utils import
     */
    public static final String IMPORT_NAME = "com.d1m.common.logs";

    /**
     * 工具类名
     */
    public static final String LOG_UTILS_NAME = "LogUtils";

    /**
     * 方法名
     */
    public static final String LOG_UTILS_METHOD_NAME = "method";

    /**
     * 方法模板(内容)
     *  packageName 日志所在文件的包路径
     *  className   日志所在文件名
     *  methodName  日志所在方法名
     *  original 日志原始参数
     *  classReferenceName 日志所在文件全限定名
     *
     */
    public static final List<String> METHOD_FORMAT = Arrays.asList("classReferenceName","methodName","original");


    public static void main(String[] args) {
        String sourceUrl = SOURCE_URL;

        try {
            //URI uri = new URI(sourceUrl);
            Path path = Paths.get(sourceUrl);
            SourceRoot sourceRoot = new SourceRoot(path);


            List<ParseResult<CompilationUnit>> parseResults = sourceRoot.tryToParse("src/main/java");
            for (ParseResult<CompilationUnit> parseResult : parseResults) {
                Optional<CompilationUnit> result = parseResult.getResult();
                if (!result.isPresent()) {
                    continue;
                }
                CompilationUnit cu =  result.get();
                LogParseV2.parse(cu);
            }

            //备份老文件
            String  srcPath = sourceUrl + FileUtil.FILE_SEPARATOR+"src";
            String  destPath = sourceUrl + FileUtil.FILE_SEPARATOR+"src-bac";
            FileUtil.copy(srcPath,destPath,false);

            sourceRoot.saveAll(
                    CodeGenerationUtils.mavenModuleRoot(LogParseV2.class)
                            .resolve(sourceUrl));

        }catch (Exception e){
            e.printStackTrace();
        }

    }

    public static void parse(CompilationUnit cu){

        if (cu == null || cu.getTypes() == null || cu.getTypes().isEmpty()) {
            return;
        }
        boolean isLog = false;
        for (ImportDeclaration anImport : cu.getImports()) {
            String nameAsString = anImport.getNameAsString();
            if (nameAsString.contains("Slf4j") || nameAsString.contains("slf4j")) {
                isLog = true;
                break;
            }
        }

        if (!isLog){
            return;
        }

        String  packageName = cu.getPackageDeclaration().get().getNameAsString();

        String className = cu.getTypes().get(0).getNameAsString();
        //获取类信息
        cu.accept(new ModifierVisitor<Void>() {


            @Override
            public Visitable visit(MethodCallExpr n, Void arg) {
                String string = n.toString();
                String regex = "^[L|l][O|o][G|g]\\.[(info)|(debug)|(error)|(warn)].+";
                MethodCallExpr newMethodCall = new MethodCallExpr();
                if (string.matches(regex)){

                    // 添加import
                    ImportDeclaration importDeclaration = new ImportDeclaration(IMPORT_NAME,false,true);
                    cu.addImport(importDeclaration);


                    NameExpr nameExpr =   (NameExpr)n.getScope().get();
                    nameExpr.setName(LOG_UTILS_NAME);

                   /* if (string.contains("info")){
                        n.setName("info");
                    }else if (string.contains("debug")){
                        n.setName("debug");
                    }else if (string.contains("error")){
                        n.setName("error");
                    }else if (string.contains("warn")){
                        n.setName("warn");
                    }*/



                    NodeList<Expression> arguments = n.getArguments();

                    NodeList<Expression> argumentsNew = new NodeList();
                    StringLiteralExpr classNameExpr = new StringLiteralExpr();
                    classNameExpr.setValue(className);

                    StringLiteralExpr packageNameExpr = new StringLiteralExpr();
                    packageNameExpr.setValue(packageName);

                    StringLiteralExpr refesrenceExpr = new StringLiteralExpr();
                    refesrenceExpr.setValue(packageName+"."+className);

                    // 获取方法名
                    Node node = n.getParentNode().get();
                    String methodName = LogParseV2.findMethod(node);
                    StringLiteralExpr methodNameExpr = new StringLiteralExpr();
                    methodNameExpr.setValue(methodName);

                    for (String s : METHOD_FORMAT) {
                        switch (s){
                            case "packageName" :
                                argumentsNew.add(packageNameExpr);
                                break;
                            case "className" :
                                argumentsNew.add(classNameExpr);
                                break;
                            case "methodName" :
                                argumentsNew.add(methodNameExpr);
                                break;
                            case "classReferenceName" :
                                argumentsNew.add(refesrenceExpr);
                                break;
                            case "original" :
                                for (Expression argument : arguments) {
                                    argumentsNew.add(argument);
                                }
                                break;

                        }
                    }

                    n.setArguments(argumentsNew);
                    System.out.println(n.toString());
                }
                return super.visit(n, arg);
            }
        }, null);



    }

    public static String findMethod(Node node){
        if (node instanceof MethodDeclaration) {
            return ((MethodDeclaration) node).getNameAsString();
        }
        return findMethod(node.getParentNode().get());
    }


}

Java使用JWT(JSON Web Token)通常需要引入一个库,比如`jjwt`(Java JWT)或者`spring-security-jwt`(Spring Security的JWT支持)。这里是一个简单的例子,展示如何使用`jjwt-core`和`jjwt-httpclient`库来生成、验证和处理JWT: 首先,你需要添加依赖到你的Maven或Gradle项目: ```xml // Maven <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.8</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.10</version> <!-- 替换为你实际使用的版本 --> </dependency> // Gradle implementation 'io.jsonwebtoken:jjwt-api:0.11.8' implementation 'io.jsonwebtoken:jjwt-jackson:0.11.8' implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.10' ``` 接下来,你可以编写一个生成JWT的方法: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; public class JWTUtils { private static final String SECRET_KEY = "your-secret-key"; // 替换为你的密钥 public static String generateToken(String userId) { Claims claims = Jwts.claims() .setSubject(userId) .setId(userId) .签发过期时间Claims.exp(new Date(System.currentTimeMillis() + (60 * 60 * 1000))); // 1小时后过期 return Jwts.builder().signWith(SignatureAlgorithm.HS256, SECRET_KEY).setClaims(claims).compact(); } public static boolean validateToken(String token) { try { Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token); return true; } catch (Exception e) { return false; } } } ``` 在这个示例,`generateToken`方法创建了一个包含用户ID的JWT,并使用HS256哈希算法签名。`validateToken`则尝试解析并验证这个JWT。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘彦青-Yannis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值