package com.dlxy.framework.filter;
import com.dlxy.framework.entity.User;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@WebFilter("/*")// /* -->所有的路径
@Component
public class GlobalFilter implements Filter {
@Value("${security.check}")
private Boolean check;
@Value("${security.access}")
private String access;
public static ConcurrentHashMap<String,Long> onlines=new ConcurrentHashMap<>();
/**
*用户登录成功后,生成token的数据并返回
* user:登录后的用户信息
*/
public static String generateToken(User user){
String token= Base64Coder.encodeString(user.toString());
onlines.put(token,System.currentTimeMillis());
return token;
}
/**
*
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//1.获取HttpServletRequest和HttpServletResponse对象
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse)servletResponse;
//2.获取用户的请求路径
String uri=request.getRequestURI();
//3.判断请求路径是否需要拦截
if(check && !uri.endsWith(".js")&& !uri.endsWith(".css")&& !access.contains(uri)){
//请求路径被拦截
//判断用户是否登录
String token = request.getHeader("Authorization");
if(token ==null || !onlines.containsKey(token)){
//重新登录
request.getRequestDispatcher("/system/needLogin").forward(request,response);
return;
}
}
filterChain.doFilter(request,response);
}
//自动清除超时token
@Override
public void init(FilterConfig filterConfig) throws ServletException{
if(check){
//1.创建定时器对象
ScheduledExecutorService service= Executors.newScheduledThreadPool(1);
//2.创建任务
Runnable task=() ->onlines.entrySet().removeIf(entry ->
System.currentTimeMillis() -entry.getValue()>10*60*1000
);
//3.启动定时器,定时执行任务
service.scheduleAtFixedRate(task,0,1, TimeUnit.SECONDS);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
金融贸易.rar (40个子文件)
financial_credit_0417
pom.xml 2KB
admin
pom.xml 788B
src
test
java
main
resources
java
com
dlxy
admin
controller
systemController.java 2KB
ThemeController.java 910B
UserController.java 2KB
BankController.java 2KB
AreaController.java 1KB
service
IThemeService.java 252B
IAreaService.java 446B
IUserService.java 911B
IBankService.java 722B
aop
AspectAop.java 2KB
serviceimpl
UserServiceImpl.java 3KB
BankServiceImpl.java 2KB
AreaServiceImpl.java 1KB
ThemeServiceImpl.java 645B
financial_credit_0417.iml 81B
.idea
jarRepositories.xml 864B
uiDesigner.xml 9KB
workspace.xml 9KB
misc.xml 526B
compiler.xml 949B
.gitignore 184B
encodings.xml 354B
framework
pom.xml 546B
src
test
java
main
resources
mappers
UserMapper.xml 2KB
BankMapper.xml 1KB
java
com
dlxy
framework
mapper
UserMapper.java 477B
BankMapper.java 488B
AreaMapper.java 405B
ThemeMapper.java 199B
filter
GlobalFilter.java 3KB
entity
Theme.java 527B
Response.java 497B
User.java 2KB
Area.java 1KB
Bank.java 971B
main
pom.xml 780B
src
test
java
main
resources
application.yml 1KB
java
com
dlxy
MainApplication.java 478B
共 40 条
- 1
资源评论
欢752
- 粉丝: 20
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功