黑马JavaWeb+AI笔记 Day11 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 {@Autowiredprivate TokenInterceptor tokenInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(tokenInterceptor).addPathPatterns("/**") //拦截所有请求.excludePathPatterns("/login"); //不需要拦截}
}
📌Interceptor 可以根据需求,配置不同的拦截资源路径:
✅Filter 与 Interceptor 区别
对比点 | Filter | Interceptor |
---|---|---|
所属规范 | Java EE(Servlet) | Spring MVC |
作用范围 | 所有请求,包括静态资源、第三方接口 | Controller 控制器方法请求(更精细) |
执行顺序 | 先于 Interceptor 执行 | Filter 执行完后才执行 Interceptor |
适合用途 | 登录校验、统一编码、跨域等 | 权限校验、日志、性能分析等 |