黑马JavaWeb+AI笔记 Day11 Web后端实战(登录模块)
一个web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链。
·
一、登录功能实现
请求路径:/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(有效载荷) | 存放自定义信息,如 id、username |
| 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 |
| 适合用途 | 登录校验、统一编码、跨域等 | 权限校验、日志、性能分析等 |
更多推荐



所有评论(0)