SpringBoot总结

发布于:2025-07-27 ⋅ 阅读:(12) ⋅ 点赞:(0)

简介

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

SpringBoot特性:

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

<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

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实体类

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

@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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency

application.yml

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


网站公告

今日签到

点亮在社区的每一天
去签到