瑞吉外卖--day02--员工管理模块-爱代码爱编程
员工管理模块
完善登录功能:
提示:过滤器在未登录前拦截主页里面内容
例如:
1. 完善登录功能代码实现
2. 过滤器具体逻辑实现
3 在启动类中间加入注解@ServletComponentScan
4 写过滤器
filter.LoginCheckFilter.java
package com.baidu.reggie.filter;
import com.alibaba.fastjson.JSON;
import com.baidu.reggie.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;
@Slf4j
@WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
//路径通配符
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response =(HttpServletResponse) servletResponse;
//过滤器具体的处理逻辑如下:
//1、获取本次请求的URI
String requestUrl = request.getRequestURI();
log.info("本次请求的URI{}",requestUrl);
//写出不用处理的请求
String[] urls = new String[]{
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**"
};
//2、判断本次请求是否需要处理
boolean check = check(urls,requestUrl);
//3、如果不需要处理,则直接放行
if (check){
log.info("拦截到请求{},不需要处理",request.getRequestURI());
filterChain.doFilter(request,response);
return;
}
//4、判断登录状态,如果已登录,则直接放行
if (request.getSession().getAttribute("employee")!=null){
log.info("用户已登录,用户id为{}",request.getSession().getAttribute("employee"));
filterChain.doFilter(request,response);
return;
}
//5、如果未登录则返回未登录结果
log.info("用户未登录");
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
}
//路径匹配
public boolean check(String[] urls,String requestUrl){
for (String url: urls) {
boolean match = PATH_MATCHER.match(url,requestUrl);
if (match==true){
return true;
}
}
return false;
}
}
在里面穿插日志进行测试