JWT跨域认证

news2025/1/13 9:36:30

新建shop项目

新建bean包,再其包下新建User

 

package com.example.shop.bean;

public class User {
    private String username;
    private String password;
    // 可以根据需要添加其他字段,比如角色、邮箱等

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    // 可以根据需要添加其他的 getter 和 setter 方法

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

新建utils包,再其包下新建JwtUtils,Result和ResultCode

 ResultCode代码如下

package com.example.shop.utils;

public interface ResultCode {
    public static Integer SUCCESS= 20000;//成功
    public static Integer ERROR=20001;//失败
}

Result代码如下

package com.example.shop.utils;

import java.util.HashMap;
import java.util.Map;

public class Result {
    private Boolean success;
    private Integer code;
    private String message;
    private Map<String, Object> data = new HashMap<>();

    // 私有构造方法
    private Result() {}

    // 成功静态方法
    public static Result ok() {
        Result r = new Result();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        return r;
    }

    // 失败静态方法
    public static Result error() {
        Result r = new Result();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失败");
        return r;
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }

    public Result success(Boolean success) {
        this.setSuccess(success);
        return this;
    }

    public Result message(String message) {
        this.setMessage(message);
        return this;
    }

    public Result code(Integer code) {
        this.setCode(code);
        return this;
    }

    public Result data(String key, Object value) {
        this.data.put(key, value);
        return this;
    }

    public Result data(Map<String, Object> map) {
        this.setData(map);
        return this;
    }
}

 JwtUtils代码如下

package com.example.shop.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtils {
    // 7天过期,单位秒
    private static final long expire = 604800;
    // 32位秘钥
    private static final String secret = "abcdfghiabcdfghiabcdfghiabcdfghi";

    // 生成token
    public static String generateToken(String username) {
        Date now = new Date();
        Date expiration = new Date(now.getTime() + 1000 * expire);
        return Jwts.builder()
                .setHeaderParam("typ", "JWT") // 设置头部信息
                .setSubject(username) // 设置主题
                .setIssuedAt(now) // 设置签发时间
                .setExpiration(expiration) // 设置过期时间
                .signWith(SignatureAlgorithm.HS512, secret) // 设置签名使用的算法和秘钥
                .compact(); // 生成token
    }

    // 解析token,获取Claims
    public static Claims getClaimsByToken(String token){
        return Jwts.parser()
                .setSigningKey(secret) // 设置秘钥
                .parseClaimsJws(token) // 解析token
                .getBody(); // 获取token中的payload部分
    }
}

 新建controller包,,在其下新建UserController

 UserController代码如下

package com.example.shop.controller;

import org.springframework.web.bind.annotation.*;
import com.example.shop.utils.Result;
import com.example.shop.utils.JwtUtils;
import com.example.shop.bean.User;

@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {

    @PostMapping("/login")
    public Result login(@RequestBody User user) {
        String token = JwtUtils.generateToken(user.getUsername());
        return Result.ok().data("token", token);
    }

    @GetMapping("/info")
    public Result info(@RequestParam String token) {
        String username = JwtUtils.getClaimsByToken(token).getSubject();
        String url = "https://img2.baidu.com/it/u=1325995315,4158780794&fm=26&fmt=auto&gp=0.ipg";
        return Result.ok().data("name", username).data("avatar", url);
    }

    @PostMapping("/logout")
    public Result logout() {
        return Result.ok();
    }
}

添加依赖

 

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

 运行localhost/user/login

输入和结果如下

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1875416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“深入解析操作系统核心:进程管理与并发艺术“

操作系统中最核心的概念是进程:这是对正在运行程序的ー个抽象 并行 并发 “在任何多道程序设计系统中,CPU由一个进程快速切换至另ー个进程,使每个进程各运行几十或几百毫秒。严格地说,在某ー个瞬间,CPU只能运行ー个进程。但在1秒钟内,它可能运行多个进程,这样就产生并行的错觉…

【漏洞复现】电信网关配置管理系统——命令执行

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 电信网关配置管理系统是一个用于管理和配置电信网关设备的软件系…

【C++题解】1466. 等差数

问题&#xff1a;1466. 等差数 类型&#xff1a;简单循环 题目描述&#xff1a; Peter 同学刚刚在学校学习了等差数列的概念。 等差数列&#xff0c;指的是一组数&#xff0c;这些数连续 2 个数的差值是相等的&#xff0c;比如&#xff1a;123&#xff0c;135&#xff0c;852…

【AI提升】AI利器Tool Call/Function Call(二):OpenAI/qwen-agent/LangChain/Ollama

上一节快速使用了Tool Call 【AI提升】AI利器Tool Call/Function Call(一) &#xff0c;使用的是LangChainOllama&#xff0c;这一节说说为什么使用这个组合&#xff0c;以及其余的使用场景。 首先大家都知道&#xff0c;在目前AI的世界里&#xff0c;各大模型都还是跟着OpenA…

onnx模型转rknn到部署

简介 最近开始用3568的板子&#xff0c;之前是在用3399&#xff0c;cpu的话3399比3568强&#xff0c;但是3568有1T的npu算力&#xff0c;所以模型移植过来用npu使用&#xff0c;之前用ncnn感觉太慢了&#xff0c;rk的npu使用没有开源&#xff0c;所以没法兼容&#xff0c;只能跑…

聚鼎贸易:装饰画行业还有没有前景

在数字化的浪潮中&#xff0c;装饰画行业似乎被边缘化&#xff0c;成为传统与现代较量中的一片瓦砾。然而&#xff0c;透过表面的凋零&#xff0c;我们能够窥见其潜藏的蓬勃生机与无限前景。 随着社会的快速发展&#xff0c;人们对生活品质的追求日益提高。家&#xff0c;作为个…

Golang | Leetcode Golang题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; func countPrimes(n int) int {primes : []int{}isPrime : make([]bool, n)for i : range isPrime {isPrime[i] true}for i : 2; i < n; i {if isPrime[i] {primes append(primes, i)}for _, p : range primes {if i*p > n {break}…

图像增强及运算篇之图像掩膜直方图和HS直方图

一.图像掩膜直方图 如果要统计图像的某一部分直方图&#xff0c;就需要使用掩码&#xff08;蒙板&#xff09;来进行计算。假设将要统计的部分设置为白色&#xff0c;其余部分设置为黑色&#xff0c;然后使用该掩膜进行直方图绘制&#xff0c;其完整代码如下所示。 # -*- codi…

golang使用RSA加密和解密

目录 前提 生成RSA公钥和密钥 读取文件 加密 解密 前提 本文章我们是先读取的RSA文件&#xff0c;所以需要先生成RSA&#xff0c;并且保存在文件中&#xff0c;再进行加密 生成RSA公钥和密钥 如果没有公钥和密钥&#xff0c;可以先看看我上一篇文章 生成RSA公钥和密钥h…

在 Java 中的使用Selenium 测试框架

Selenium 测试框架&#xff1a;在 Java 中的使用 Selenium 测试框架就是这样一个强大的工具&#xff0c;它为 Web 应用的自动化测试提供了全面且高效的解决方案。 一、Selenium 简介 Selenium 是一个开源的自动化测试工具集&#xff0c;专门用于测试 Web 应用程序。它支持多…

Camera Raw:编辑 - 曲线

Camera Raw “编辑”模块中的曲线 Curve面板提供了曲线这一强大的工具&#xff0c;通过精确控制亮度和对比度&#xff0c;以及调整红、绿、蓝通道的曲线&#xff0c;可以显著提升图像的视觉效果和色彩表现。这些调整工具为摄影师和图像编辑者提供了丰富的创意可能性&#xff0c…

Cesium 在加载 3dTiles 如何如何获取ID

文章目录 问题分析问题 加载的 3dTiles 打印content.getFeature(i)出来后如图所示,想获取到id值 分析 var tileset = mapLayer.init3dTileLayer({url:it.url,maximumMemoryUsage: it.maximumMemoryUsage,

python查找支撑数 青少年编程电子学会python编程等级考试三级真题解析2022年3月

目录 python查找支撑数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python查找支撑数 2022年3月 python编程等级考试级编程题 一、题目要求…

金融科技:重塑用户体验,驱动满意度飙升

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;已经深入到我们生活的每一个角落&#xff0c;从日常支付到投资理财&#xff0c;再到跨境汇款&#xff0c;它都在悄无声息地改变着我们的金融行为。而在这背后一个不可忽视的驱动力就是金融科技对用户体验…

kubernetes给指定用户分配调用k8s的api权限

文章目录 概要利用RBAC添加角色权限使用shell命令创建角色权限使用配置文件创建角色权限 调用k8s的api获取k8s账户的token 小结 概要 使用kubernetes部署项目时&#xff0c;有些特殊场景&#xff0c;我们需要在自己创建的pod里面调用k8s的api来管理k8s&#xff0c;但是需要使用…

Ubuntu24.04之安装KVM(二百五十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

牛客小白月赛97:D走一个大整数迷宫

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给一个 nmn\times mnm 矩阵迷宫&#xff0c; 第 iii 行第 jjj 列的值为 ci,jc_{i,j}ci,j​ &#xff0c;LHLHLH 在迷宫中迷路了&#xff0c;他需要你的帮助。 LHLHLH 当前在 (1,1)(1…

Linux基础 - Samba 或 NFS 实现文件共享

目录 零. 简介 一. Samba 二. NFS 三. 总结 零. 简介 在 Linux 系统中&#xff0c;Samba 和 NFS 是两种常见的用于实现文件共享的方式&#xff0c;它们各有特点。 Samba 主要用于在 Linux 和 Windows 系统之间实现文件和打印机共享。它基于 SMB&#xff08;Server Message…

[Leetcode刷题] - 栅栏涂漆DP类问题

题目描述 这一类题目通常会问给定一组房子n和一组染料k去涂漆&#xff0c;并且会加入限制条件比如&#xff1a;某种颜色只能使用1次&#xff0c;相相邻房子不能涂同一种颜色&#xff0c;或者最多不能超过连续3个房子涂想通过颜色等等&#xff0c;让我们列举所有可能性总和&…

企智汇PaaS平台:数字化时代下的项目管理利器

企智汇项目管理系统PaaS平台是一个强大而灵活的平台&#xff0c;旨在为企业提供高效、智能的项目管理解决方案。在项目管理领域提供了显著的优势&#xff0c;这些优势主要体现在以下几个方面&#xff1a; 1.快速部署与迭代&#xff1a;企智汇一体化PaaS平台提供了预配置的基础…