文章目录
- 登录校验,使用过滤器
-
- 在webFilter
登录校验,使用过滤器
在webFilter
使用过滤器过滤所有的请求
然后
然后根据登录
先生成令牌
然后把令牌封装到前端
然后前端拿到令牌进行封装
然后再配置过滤器
@WebFilter(urlPatterns = "/*")
urlPatterns="/*"是过滤请求
但是登录接口要放行
java
package com.healer.filter;
import com.alibaba.fastjson.JSONObject;
import com.healer.common.Result;
import com.healer.utils.JwtUtils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author healer
* @Description LoginCheckFilter
* @data 2024-06-04 15:15
*/
@WebFilter(urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
//先拿到url地址
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String url = request.getRequestURL().toString();
// 判断url中的是否包含login 如果包含说明是登录操作 放行
if (url.contains("login")) {//登录请求
log.info("登录请求,直接放行");
filterChain.doFilter(req, resp);
return;
}
// 判断请求头中的令牌
// 判读令牌是否存在,如果不存在返回错误信息
String jwt = request.getHeader("token");
if (!StringUtils.hasLength(jwt)) {
log.info("jwt的令牌为空,返回错误结果");
Result result = Result.error("NOT_LOGIN");
String notLogin = JSONObject.toJSONString(result);
response.getWriter().write(notLogin);
return;
}
//
// 解析token , 如果解析失败,那么返回未登录
try {
JwtUtils.parseJwt(jwt);
} catch (Exception e) {
e.printStackTrace();
log.info("解析令牌出现错误");
Result result = Result.error("NOT_LOGIN");
String notLogin = JSONObject.toJSONString(result);
response.getWriter().write(notLogin);
return;
}
log.info("解析成功");
filterChain.doFilter(request, response);
//
}
}