登录过滤器
实现的功能
当用户未登录的时候,只允许器访问前端页面和有关登录接口,若用户成功登录以后,则不进行任何拦截.
思路
设置一个不拦截路径的string数组urls(前端页面可以全部放行),利用路径匹配器对当前地址与数组中的地址进行匹配,如果匹配成功则无需拦截,全部匹配失败则需要判断当前是否有用户登录(),若有则放行,否则拦截
知识点
- 过滤器Class文件需要实现Filter接口,并重写其中的doFilter方法.注意此时需要在springbootapplication类上加上@ServletComponentScan的注解将过滤器自动注入
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
}
- 路径匹配器:可以实现包含通配符的两个url路径的匹配
//路径匹配器,支持通配符
public static final AntPathMatcher PATH_MATCHER=new AntPathMatcher();
- 通过request获取当前请求的url
String requestURI = request.getRequestURI();
- 调用匹配器方法
boolean match = PATH_MATCHER.match(i, requestURI);
- 利用session获取已登录用户信息,此处首先需要在用户成功登录的时候将用户信息写入session.
//登录成功,将用户放入session中
request.getSession().setAttribute("user",userId);
//判断用户是否登录,登录直接放行
if(request.getSession().getAttribute("user")!=null){
...}
实例代码
package com.it.filter;
import com.alibaba.fastjson.JSON;
import com.it.common.R;
import lombok.extern.slf4j.