新的项目springboot

bu'ybuyshenglombok

 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

添加依赖 lombok

package com.example.demo.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//注解了解
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {private Integer code;//业务状态码  0 成功 1失败private String message;//提示信息private T dataa;//响应数据public static <E> Result<E> success(E data){return new Result<>(0,"操作成功",data);}public static Result success(Integer code, String message) {return new Result(0,"操作成功",null);}public static Result error(Integer code, String message) {return new Result(1,message,null);}
}
  @Insert("insert into users(password,username) values(#{possword},#{username})")void add(@Param("possword")String possword, @Param("username")String username);

如果找不到要用Param参数

  <!--validation 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

校验依赖


import com.example.demo.pojo.Result;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;//处理全局的异常
@RestControllerAdvice
public class GlobbalExceptionHandler {@ExceptionHandler(value = Exception.class)public Result handleException(Exception e) {e.printStackTrace();return Result.error(StringUtils.hasLength(e.getMessage())?e.getMessage():"参数不正确");}
}

处理全局异常

登录认证

JWT令牌

{}

数字签名  token

第一部分  头部  第二部分 payload有效荷载  第三部分 签名  确保安全

login生成令牌   

验证令牌

<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.2.1</version></dependency>

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency>
 public  void test() {Map<String,Object> map = new HashMap<>();map.put("id",1);map.put("username","张三");
//        生成jwtString token = JWT.create().withClaim("user",map).withExpiresAt(new Date(System.currentTimeMillis()+1000*60))//过期时间 60分钟.sign(Algorithm.HMAC256("123456"));//指定算法,密钥System.out.println(token);}

生成密钥token

    public void test2() {String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6IuW8oOS4iSJ9LCJleHAiOjE3MTQ5MTY0ODN9.eGbO7aZ5MFlr_mt0h5-Nn0Nl7nXdgIMCQroDngmOB50";JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("123456")).build();DecodedJWT jwt = jwtVerifier.verify(token);//验证tokenMap<String, Claim> map = jwt.getClaims();System.out.println(map.get("user"));}

获取解析密钥

package com.example.demo.utils;import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;import java.util.Date;
import java.util.Map;public class JwtUtil {private static final  String Key = "123456";public static String genToken(Map<String,Object> map){
//        Map<String,Object> map = new HashMap<>();
//        map.put("id",1);
//        map.put("username","张三");
//        生成jwtreturn  JWT.create().withClaim("user",map).withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60))//过期时间 60分钟.sign(Algorithm.HMAC256(Key));//指定算法,密钥
//        System.out.println(token);}public static Map<String, Claim> parseToken(String token){return JWT.require(Algorithm.HMAC256(Key)).build().verify(token).getClaims();}
}
  Map<String,Object> map = new HashMap<>();map.put("username",username);map.put("password",password);String token = JwtUtil.genToken(map);

生成token

  @PostMapping("/login")public Result login(@RequestParam("username") String username,@RequestParam("password") String password) {System.out.println(username+"登录,"+password);Map<String,Object> map = new HashMap<>();map.put("username",username);map.put("password",password);String token = JwtUtil.genToken(map);System.out.println("生成的:::"+token);Users u = usersService.findByUserNameAndPwd(username,password);if (u != null) {return  Result.success(u);}else{return Result.error("不存在");}}@GetMapping("/gettoken")public Result gettoken(@RequestHeader(name = "Authorization")String token, HttpServletResponse response) {System.out.println("jinrule ma ????"+token);
//        return Result.success("所有的数据----------");try {Map<String, Claim> claim = JwtUtil.parseToken(token);response.setStatus(200);System.out.println("jinrule ma ????"+claim);return Result.success("所有的数据----------");} catch (Exception e) {response.setStatus(401);
//            throw new RuntimeException(e);return Result.success("未登录");}}
}

拦截器进行拦截

统一的

编写拦截器,统一拦截

package com.example.demo.config;import com.example.demo.interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor   loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {
//        WebMvcConfigurer.super.addInterceptors(registry);
//        登录接口和注册接口不拦截registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login","/user/logout","/user/register");}
}

//实现拦截器  注册拦截器
@Component //注入Ioc容器中
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//       令牌验证String token = request.getHeader("Authorization");
//        解析tokentry {Map<String, Claim> claim = JwtUtil.parseToken(token);response.setStatus(200);System.out.println("拦截器????"+claim);return true;} catch (Exception e) {response.setStatus(401);
//            throw new RuntimeException(e);return false;}}
}

拦截和注册

public class JwtUtil {private static final  String Key = "123456";public static String genToken(Map<String,Object> map){
//        Map<String,Object> map = new HashMap<>();
//        map.put("id",1);
//        map.put("username","张三");
//        生成jwtreturn  JWT.create().withClaim("user",map).withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60))//过期时间 60分钟.sign(Algorithm.HMAC256(Key));//指定算法,密钥
//        System.out.println(token);}public static Map<String, Object> parseToken(String token){return JWT.require(Algorithm.HMAC256(Key)).build().verify(token).getClaim("cliams").asMap();}
}
public class JwtUtil {private static final  String Key = "123456";public static String genToken(Map<String,Object> map){
//        Map<String,Object> map = new HashMap<>();
//        map.put("id",1);
//        map.put("username","张三");
//        生成jwtreturn  JWT.create().withClaim("user",map).withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60))//过期时间 60分钟.sign(Algorithm.HMAC256(Key));//指定算法,密钥
//        System.out.println(token);}public static Map<String, Object> parseToken(String token){return JWT.require(Algorithm.HMAC256(Key)).build().verify(token).getClaim("user").asMap();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

ELK Stack 8 接入ElasticFlow

介绍 Netflow v5 / v9 / v10&#xff08;IPFIX&#xff09;&#xff0c;支持大部分网络厂商及VMware的分布式交换机。 NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图&#xff0c;记录下每个TCP/IP事务的信息。当汇集起来时&#xff0c;它更加易于管理和易读。…

Git系列:config 配置

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Flutter笔记:Widgets Easier组件库(3)使用按钮组件

Flutter笔记 Widgets Easier组件库&#xff08;3&#xff09;&#xff1a;使用按钮组件 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddre…

xLua背包实践

准备工作 环境&#xff0c;代码 在C#代码方面我们需要准备单例模式基类&#xff0c;AB包管理器&#xff0c;lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包&#xff0c;具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码&#xff1a; JsonUtil…

使用Python爬取淘宝商品并做数据分析

使用Python爬取淘宝商品并做数据分析&#xff0c;可以按照以下步骤进行操作&#xff1a; 确定需求&#xff1a;确定要爬取的淘宝商品的种类、数量、关键词等信息。 编写爬虫程序&#xff1a;使用Python编写爬虫程序&#xff0c;通过模拟浏览器请求&#xff0c;获取淘宝商品的页…

idm线程怎么设置 idm线程数怎么上不去 idm免安装

IDM&#xff08;Internet Download Manager&#xff09;是一款流行的下载管理软件&#xff0c;IDM采用高级的多线程下载技术&#xff0c;可以将下载文件分成多个部分同时下载&#xff0c;从而提高下载速度&#xff0c;它因高效的下载速度和丰富的功能而受到用户的喜爱。接下来&…

基于FPGA的数字信号处理(5)--Signed的本质和作用

前言 Verilog中的signed是一个很多人用不好&#xff0c;或者说不太愿意用的一个语法。因为不熟悉它的机制&#xff0c;所以经常会导致运算结果莫名奇妙地出错。其实了解了signed以后&#xff0c;很多时候用起来还是挺方便的。 signed的使用方法主要有两种&#xff0c;其中一种…

idm下载速度慢解决办法 idm批量下载怎么用 idm优化下载速度 Internet Download Manager解决下载速度慢的方法教程

IDM (Internet Download Manager)是一款兼容性大&#xff0c;支持多种语言的下载管理软件&#xff0c;它可以自动检测并下载网页上的内容&#xff0c;这正是这一优点&#xff0c;使得它受到了广大用户的喜爱。但是在下载的过程中&#xff0c;我们会遇到idm下载速度慢怎么回事&a…

【设计模式】13、template 模板模式

文章目录 十三、template 模板模式13.1 ppl13.1.1 目录层级13.1.2 ppl_test.go13.1.3 ppl.go13.1.4 llm_ppl.go13.1.5 ocr_ppl.go 十三、template 模板模式 https://refactoringguru.cn/design-patterns/template-method 如果是一套标准流程, 但有多种实现, 可以用 template …

江湖有法受邀参加第四届中国创始人IP生态大会

四月的杭城春意盎然、微风轻拂,到处洋溢着一派欣欣向荣、百花争艳的美好景象。2024 年 4 月 27 日下午 1:30,备受瞩目的第四届中国创始人 IP 生态大会在杭州华礼宴国际礼宴中心盛大开幕。本次大会由“大咖会”主办,以“打造一个圈层,影响一座城”为主题,吸引了众多行业大咖齐聚…

ROS2学习——Docker环境下安装于使用(1)

目录 一、简要 二、ROS2和ROS1区别 三、环境搭建与安装 &#xff08;2&#xff09;拉取ubuntu22.04镜像 &#xff08;2&#xff09;安装ROS2 1. 基本设置 2.设置源 3.安装ROS2功能包 4.测试 四、相关指令学习 1.小海龟测试 2.ros2 node等指令 3.rqt 一、简要 随着R…

API安全

一&#xff0c;什么是API API指的是应用程序编程接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是一组定义了软件组件如何相互交互的规范。通过API&#xff0c;不同的软件可以相互通信和交换数据&#xff0c;实现不同软件之间的集成和互操作。 …

compose调用系统分享功能分享图片文件

compose调用系统分享功能图片文件 简介UI界面提供给外部程序的文件访问权限创建FileProvider设置共享文件夹 通用分享工具虚拟机验证结果参考 本系列用于新人安卓基础入门学习笔记&#xff0c;有任何不同的见解欢迎留言 运行环境 jdk17 andriod 34 compose material3 简介 本案…

线性数据结构-手写队列-哈希(散列)Hash

什么是hash散列&#xff1f; 哈希表的存在是为了解决能通过O(1)时间复杂度直接索引到指定元素。这是什么意思呢&#xff1f;通过我们使用数组存放元素&#xff0c;都是按照顺序存放的&#xff0c;当需要获取某个元素的时候&#xff0c;则需要对数组进行遍历&#xff0c;获取到指…

ton-http-api安装部署

1、拉取github代码 mkdir /data git clone https://github.com/toncenter/ton-http-api.git cd ton-http-api2、创建环境变量 ./configure.py cat .env TON_API_CACHE_ENABLED0 TON_API_CACHE_REDIS_ENDPOINTcache_redis TON_API_CACHE_REDIS_PORT6379 TON_API_CACHE_REDIS_T…

6.k8s中的secrets资源

一、Secret secrets资源&#xff0c;类似于configmap资源&#xff0c;只是secrets资源是用来传递重要的信息的&#xff1b; secret资源就是将value的值使用base64编译后传输&#xff0c;当pod引用secret后&#xff0c;k8s会自动将其base64的编码&#xff0c;反编译回正常的字符…

仿知乎网站问答源码,开源版

仿知乎网站问答源码&#xff0c;开源版 需要一定动手能力 发文章&#xff0c;发视频&#xff0c;发想法&#xff0c;提问回答&#xff0c;注册登录 开发环境 使用技术&#xff1a;springbootthymeleafRedis&#xff1b; 开发环境&#xff1a;tomcat8.0&#xff0c;jdk8.0, ID…

2023下半年软件设计师上午题——冒泡排序

快速排除法&#xff0c;根据冒泡排序特性&#xff0c;每一趟排序都会确实最大/最小值&#xff0c;故升序两趟后&#xff0c;最后两个元素应该是已经排序好的第二大&#xff0c;和最大的元素&#xff0c;所以排除B,D&#xff0c;再因为每次排序都会两两交换&#xff0c;所以排除…

裸金属服务器,云用户的新体验

定义 裸金属服务器&#xff08;Bare Metal Server&#xff09;&#xff0c;是一台既具有传统物理服务器特点的硬件设备&#xff0c;又具备云计算技术的虚拟化服务功能&#xff0c;是硬件和软件优势结合的产物。可以为企业提供专属的云上物理服务器&#xff0c;为核心数据库、关…