本文主要是介绍瑞吉外卖实战学习--完善登录功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
完善登录功能
- 1、创建自定义过滤器LoginCheckFiler
- 1.1通过@WebFilter创建过滤器
- 1.2 验证是否可以拦截请求
- 1.3 代码
- 2、在启动类加入注解@ServletComponentScan 用来扫描过滤器
- 触发所有的过滤器@ServletComponentScan
- 3、完善过滤器的处理逻辑
- 3.1判断是否需要是要放行的请求
- 3.2判断用户是否登录
- 3.3如果没有登录返回请求体并携带msg信息
1、创建自定义过滤器LoginCheckFiler
1.1通过@WebFilter创建过滤器
1.2 验证是否可以拦截请求
1.3 代码
package com.example.ruiji_demo;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;@Slf4j
@SpringBootApplication
@ServletComponentScan
public class RuijiDemoApplication {public static void main(String[] args) {SpringApplication.run(RuijiDemoApplication.class, args);log.info("项目启动成功");}}
2、在启动类加入注解@ServletComponentScan 用来扫描过滤器
触发所有的过滤器@ServletComponentScan
3、完善过滤器的处理逻辑
3.1判断是否需要是要放行的请求
3.2判断用户是否登录
3.3如果没有登录返回请求体并携带msg信息
package com.example.ruiji_demo.filter;import com.alibaba.fastjson2.JSON;
import com.example.ruiji_demo.common.R;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;import java.io.IOException;
import java.util.logging.LogRecord;/*** @author jitwxs* @date 2024年03月25日 22:24*/
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {
// 路径匹配器,支持通配符public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;// 1、获取本次请求的urlString requestUrl = request.getRequestURI();
// 2、定义不需要处理的路径String[] urls = new String[]{"/employee/login","/employee/logout","/backeed/**","/front/**"};
// 3、判断本次请求是否需要处理,调用匹配路径boolean check = check(urls,requestUrl);// 4.检测路径是否需要筛选如果不需要筛选直接放行if(check){filterChain.doFilter(request,response);return;}
// 5.判断是否登录过if(request.getSession().getAttribute("employee") != null){filterChain.doFilter(request,response);return;}// 6.如果没有登录过,通过输出流方向客户端页面响应数据response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));return;}/*** 匹配路径,检查本次请求是否需要放行* @param urls* @param requestUrl* @return*/public boolean check(String[] urls,String requestUrl){for(String url:urls){boolean match = PATH_MATCHER.match(url,requestUrl);log.info("match:{}",match);if(match){return true;}}return false;}
}
这篇关于瑞吉外卖实战学习--完善登录功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!