当前位置:网站首页>实现浏览页面时校验用户是否已经完成登录的功能
实现浏览页面时校验用户是否已经完成登录的功能
2022-07-05 20:43:00 【无尽的沉默】
一.实现原理
实现步骤:
1、创建自定义过滤器LoginWebFilter.java
2、在启动类上加入注解@ServletComponentScan,用来扫描web相关的注解
3、完善过滤器的处理逻辑
二.代码实现
首先在main/java/下创建一个filter文件夹用来存储所有过滤器的文件,在此文件夹下创建一个LoginWebFilter.java

接下来在启动类上加入注解@ServletComponentScan,用来扫描web相关的注解

最后 完善过滤器的处理逻辑
过滤器的处理逻辑

LoginWebFilter类
package com.itheima.regiee.filter;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.itheima.regiee.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 检测员工是否登录
*/
@WebFilter(filterName = "loginWebFilter",urlPatterns = "/*")
@Slf4j
public class LoginWebFilter implements Filter {
private static AntPathMatcher pathMatcher=new AntPathMatcher(); //uri自动匹配
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) servletRequest; //强制转换为Httpservlet
HttpServletResponse response=(HttpServletResponse) servletResponse;
/**
* 1、获取本次请求的URI
* 2、判断本次请求是否需要处理
* 3、如果不需要处理,则直接放行
* 4、判断登录状态,如果已登录,则直接放行
* 5、如果未登录则返回未登录结果
*/
//1、获取本次请求的URl
String requestUrl=request.getRequestURI();
//需要定义放行的请求
String[] uris=new String[]{ //这些请求都需要放行
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**"
};
//2、判断本次请求是否需要处理
boolean flag=check(uris,requestUrl);
if(flag){ //本次请求直接放行
filterChain.doFilter(request,response);
return; //如果本次请求不拦截,直接不用走后面的代码了
}
//long id = (long)request.getSession().getAttribute("employee");
//4、判断登录状态,如果已登录,则直接放行,这个attribute是记录是否已经登录的
if(request.getSession().getAttribute("employee")!=null){ //说明已经登录了
filterChain.doFilter(request,response);
return;
}
//5、如果未登录则返回未登录结果
//设置返回json格式,可以看到res.data.msg就是返回的输出流
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
return;
}
/**
* 路径匹配,如果检验本次请求是否需要放行
* @param uris
* @param requestUrl
* @return
*/
public boolean check(String[] uris,String requestUrl){
for (String s : uris) { //请求的url地址看是否需要放行,其中urlis中的资源都是需要放行的
boolean flag=pathMatcher.match(s,requestUrl);
if(flag){ //匹配上了,说明请求的资源需要放行
return true;
}
}
return false; //说明请求的地址是不能放行的
}
}
R的工具类
package com.itheima.regiee.common;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/*
* 通用返回结果,服务端响应的数据最终都会封装成此对象
* */
@Data
public class R<T> {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}
前端vue.js

边栏推荐
- Applet page navigation
- Abnova e (diii) (WNV) recombinant protein Chinese and English instructions
- 鸿蒙系统控制LED的实现方法之经典
- 小程序项目结构
- Use of form text box (II) input filtering (synthetic event)
- Leetcode (347) - top k high frequency elements
- Abbkine trakine F-actin Staining Kit (green fluorescence) scheme
- Prosci LAG-3 recombinant protein specification
- Welcome to the game and win rich bonuses: Code Golf Challenge officially launched
- Simple understanding of interpolation search
猜你喜欢

National Eye Care Education Conference, 2022 the Fourth Beijing International Youth eye health industry exhibition

IC popular science article: those things about Eco

Return to blowing marshland -- travel notes of zhailidong, founder of duanzhitang

渗透创客精神文化转化的创客教育

产品好不好,谁说了算?Sonar提出分析的性能指标,帮助您轻松判断产品性能及表现

haas506 2.0开发教程 - 阿里云ota - pac 固件升级(仅支持2.2以上版本)

Typhoon is coming! How to prevent typhoons on construction sites!

Make Jar, Not War

Duchefa细胞分裂素丨二氢玉米素 (DHZ)说明书

How to make ERP inventory accounts of chemical enterprises more accurate
随机推荐
渗透创客精神文化转化的创客教育
3.3 project evaluation
【刷题记录】1. 两数之和
CVPR 2022 | 常见3D损坏和数据增强
Abnova total RNA Purification Kit for cultured cells Chinese and English instructions
【UE4】UnrealInsight获取真机性能测试报告
ProSci LAG-3 重组蛋白说明书
中国的软件公司为什么做不出产品?00后抛弃互联网;B站开源的高性能API网关组件|码农周刊VIP会员专属邮件周报 Vol.097
Graph embedding learning notes
Abnova丨培养细胞总 RNA 纯化试剂盒中英文说明书
3.3、项目评估
手机开户股票开户安全吗?我家比较偏远,有更好的开户途径么?
ProSci LAG3抗体的化学性质和应用说明
PHP反序列化+MD5碰撞
go 文件路径操作
Monorepo管理方法论和依赖安全
Frequent MySQL operations cause table locking problems
CVPR 2022 | common 3D damage and data enhancement
Duchefa MS medium contains vitamin instructions
Document method