SpringBoot总结

简介

概述:SpringBoot是Spring提供的一个子项目,用于快速构建Spring应用程序

SpringBoot特性:

>起步依赖:本质上就是一个Maven坐标,整合了完成一个功能需要的所有坐标

XML 复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

>自动配置:遵循约定大约配置的原则,在boot程序启动后,一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发

>其他特性:1.内嵌的Tomcat、Jetty(无需部署WAR文件)

2.外部化配置.

3.不需要XML配置(properties/yml)

三层架构

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。

service:业务逻辑层,处理具体的业务逻辑。

dao: 数据访问层(Data Access Object)(持久层 如mybatis),负责数据访问操作,包括数据的增、删、改、查。

执行流程:

前端发起请求后会到达Controller层,Controller层接收请求后调用Service层进行逻辑处理,而逻辑处理的前提是得先拿到数据,所以此时Service层会调用Dao层,Dao层再去操作文件中的数据,当数据拿到之后再把数据返回Service层,Service层再进行逻辑处理,处理后的结果再返回给Controller层,Controller层再响应数据,返回给前端

接口文档

通俗的讲,接口文档能告诉开发者接口能返回的数据,以及为了获取这些数据,开发者

需要输入什么样的数据,请求哪个接口(即规范)

为什么使用接口文档:

1、项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发

2、项目维护中或者项目人员更迭,方便后期人员查看、维护

3、测试人员验证检查接口是否正确

JWT令牌

什么是JWT?

JSON Web Token(JWT)是一个开放的行业标准,它定义了一种简洁的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止被篡改。

JWT令牌的优点: 1、jwt基于json,非常方便解析。 2、可以在令牌中自定义丰富的内容,易扩展。 3、通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。

JWT令牌结构:

JWT令牌由Header、Payload、Signature三部分组成,每部分中间使用点(.)分隔,比如:xxxxx.yyyyy.zzzzz

登录认证 拦截器

对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在SpringBoot开发的项目中,通过实现拦截器来实现用户登录拦截并验证。

LoginInterceptor

java 复制代码
package com.rzl.interceptors;
import com.rzl.utils.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import java.util.Map;


@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//令牌验证
       String token = request.getHeader("Authorization");
     //解析token
        try {
            Map<String,Object> claims = JwtUtil.parseToken(token);
            //放行
            return true;
        } catch (Exception e) {
//            http响应状态码为401
            response.setStatus(401);
            //不放行
            return false;
        }
        
    }
}

参数校验

注解

NotNull :值不能为null

NotEmpty :值不能为null,并且内容不为空

Email : 满足邮箱格式

User实体类

java 复制代码
package com.rzl.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @NotNull
    private Integer id;//主键ID
    private String username;//用户名
    @JsonIgnore   //让springmvc把当前对象转换为json字符串时,忽略password,最终的json字符串中就没有password这个属性
    private String password;//密码
    @NotEmpty
    @Pattern(regexp = "^\\S{1,10}$")
    private String nickname;//昵称
    @NotEmpty
    @Email
    private String email;//邮箱
    private String userPic;//用户头像地址
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}

UserController

java 复制代码
@PutMapping("/update")
    public Result update(@RequestBody @Validated User user) {
        userService.update(user);
        return Result.success();
    }

令牌主动失效机制

1.登录成功后,给浏览器响应令牌的同时,把该令牌存储到redis中

2.LoginInterceptor拦截器中,需要验证浏览器携带的令牌,并同时需要获取到redis中存储的与之相同的令牌

3.当用户修改密码成功后,删除redis中存储的旧令牌

集成Redis

pom.xml

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency

application.yml

java 复制代码
spring:
  application:
    name: big-event
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/big_event
    username: root
    password: 123456
  data:
    redis:
      host: localhost
      port: 6379
相关推荐
天天摸鱼的java工程师4 分钟前
🔧 MySQL 索引的设计原则有哪些?【原理 + 业务场景实战】
java·后端·面试
snakeshe10108 分钟前
Maven核心功能与IDEA高效调试技巧全解析
后端
*愿风载尘*1 小时前
ksql连接数据库免输入密码交互
数据库·后端
溟洵1 小时前
Qt 窗口 工具栏QToolBar、状态栏StatusBar
开发语言·前端·数据库·c++·后端·qt
GEM的左耳返1 小时前
Java面试实战:从基础到架构的全方位技术交锋
spring boot·微服务·云原生·java面试·技术解析·ai集成
ppo921 小时前
MCP简单应用:使用SpringAI + Cline + DeepSeek实现AI创建文件并写入内容
人工智能·后端
创码小奇客1 小时前
Talos 使用全攻略:从基础到高阶,常见问题一网打尽
java·后端·架构
Re2751 小时前
ThreadLocal 入门:搞懂线程私有变量
后端
midsummer_woo2 小时前
基于spring boot的纺织品企业财务管理系统(源码+论文)
java·spring boot·后端
zc-code2 小时前
Spring Boot + @RefreshScope:动态刷新配置的终极指南
java·spring boot·后端