1.登录校验功能
1.客户端会话跟踪技术:cookie
2.服务端会话跟踪技术:session
浏览器在第一次请求服务器时,服务器创建会话对象session,每一个session都有一个id,服务器端给浏览器响应数据时会将id通过Cookie响应给浏览器,(Set-Cookie:JSESSION=1),浏览器接收到响应数据后自动将Cookie存储在浏览器本地,在后续的每一次请求都会将Cookie的数据获取出来并且带到服务端,服务器拿到session的id会从众多的session中找到当前请求的会话对象session。
优点:存储在服务端,安全
缺点:服务器集群环境下无法直接使用Session,Cookie的缺点
3.jwt令牌
1.配置依赖
2.生成jwt
![](https://img-blog.csdnimg.cn/direct/45ea1dc323ff4a8095a7e0a560f8a97a.png)
3.解析jwt令牌
4.登录后下发令牌
1.导入包
2.修改logincontroller
3.postman测试
4.
5.前后端联调
修改前端代码
2.Filter
1.编写DemoFilter类实现Filter接口
2.拦截路径
3.过滤器链
4.登录校验过滤器
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) servletRequest;
HttpServletResponse resp=(HttpServletResponse) servletResponse;
//1.获取请求url
String url = req.getRequestURL().toString();
log.info("请求的url:{}",url);
//2.判断请求中是否包含login 如果包含 说明是登陆操作 放行
if(url.contains("login")){
log.info("登陆操作");
filterChain.doFilter(servletRequest,servletResponse);
return;
}
//3.获取请求头中的令牌(token)
String jwt = req.getHeader("token");
//4.判断令牌是否存在 如果不存在 返回错误结果(未登录)
if(!StringUtils.hasLength(jwt)){
log.info("请求头token为空 返回未登录的信息");
Result error = Result.erro();
//手动转换 对象--json ------>阿里巴巴fastjson
String notLogin = JSONObject.toJSONString(error);
resp.getWriter().write(notLogin);
return;
}
//5.解析token 如果解析失败 返回错误结果(未登录)
try {
JwtUtils.parseJWT(jwt);
} catch (Exception e) { //jwt解析失败
e.printStackTrace();
log.info("解析令牌失败 返回未登录错误信息");
Result error = Result.erro();
//手动转换 对象--json ------>阿里巴巴fastjson
String notLogin = JSONObject.toJSONString(error);
resp.getWriter().write(notLogin);
return;
}
//6.放行
log.info("令牌合法 放行");
filterChain.doFilter(servletRequest,servletResponse);
}
}