一、登录功能实现

请求路径:/login

请求方式:post

请求参数:application/json

✅ 核心流程
步骤 说明
请求参数接收 用户名、密码
查询数据库 根据用户名和密码查询 emp 表
判断是否存在 存在则登录成功,返回用户数据 + 令牌
登录失败处理 返回错误信息(如 401 未认证)


二、登录校验(访问权限控制)

✅会话技术

概念:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。

会话跟踪方案

1、Cookie(客户端会话跟踪技术

  • HTTP协议中支持的技术

缺点

  • 移动端APP无法使用Cookie
  • 不安全,用户可以自己禁用Cookie
  • Cookie不能跨域

2、Session(服务端会话跟踪技术

  • 存储在服务端,安全

 缺点:

  • 集群部署时 Session 不共享,需额外配置共享机制(如 Redis)

3、令牌技术

优点:

  • 支持PC端、移动端
  • 解决集群环境下的认证问题
  • 减轻服务器端存储压力

缺点:

  • 需要自己实现

✅JWT令牌

概念:定义了一种简洁的、自包含的格式,用于在通信双方以 json 数据格式安全的传输信息

结构组成

部分 内容说明
Header(头) 记录令牌类型、 签名算法 {"alg":"HS256","typ":"JWT"}
Payload(有效载荷) 存放自定义信息,如 idusername
Signature(签名) 用于防止Token被篡改,将 header、payLoad 融入,并加入指定秘钥,通过指定签名算
法计算而来。

下载依赖

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

 JWT 工具类

public class Jwt {
    private static final String SECRET_KEY = "emhhb2ppbg==";// 秘钥
    private static final long EXPIRATION_TIME = 12 * 60 * 60 * 1000;// 有效时间:12小时

    //生成Jwt令牌
    public static String generateToken(Map<String, Object> claims) {
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .addClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .compact();
    }

    //解析Jwt令牌
    public static Claims parseToken(String token) throws Exception {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }
}

✅过滤器 Filter

概念:Filter 过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。

功能

  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
  • 过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。
@WebFilter(urlPatterns="/*")  拦截所有请求
@ServletComponentScan  开启了SpringBoot对Servlet组件的支持
chain.doFilter(request,response) 放行

📌 Filter可以根据需求,配置不同的拦截资源路径:


✅过滤器链

介绍:一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。

顺序:注解配置的Filter,优先级是按照过滤器类名(字符串)的自然排序。


✅拦截器 Interceptor

概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,主要用来动态拦截控制器方法的执行。

作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。

配置类:

//配置类
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private TokenInterceptor tokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor)
                .addPathPatterns("/**")         //拦截所有请求
                .excludePathPatterns("/login"); //不需要拦截
    }
}

📌Interceptor 可以根据需求,配置不同的拦截资源路径:


✅Filter 与 Interceptor 区别
对比点 Filter Interceptor
所属规范 Java EE(Servlet) Spring MVC
作用范围 所有请求,包括静态资源、第三方接口 Controller 控制器方法请求(更精细)
执行顺序 先于 Interceptor 执行 Filter 执行完后才执行 Interceptor
适合用途 登录校验、统一编码、跨域等 权限校验、日志、性能分析等
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐