用户只有在登录后才能访问系统首页,不登录则跳转到登录页面

方法一:使用过滤器

1、过滤器代码

" loginCheckFilter " 过滤器名称
" /* "	拦截所有内容

在这里插入图片描述 功能完善
在这里插入图片描述在这里插入图片描述在这里插入图片描述
@WebFilter(filterName = “loginCheckFilter”,urlPatterns = “/*”)
@Slf4j
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.获取本次请求的URL
    String requestURI = request.getRequestURI();
    log.info("拦截到请求:{}",requestURI);            //输出日志

        //定义不需要处理的请求路径
    String[] urls = new  String[]{
            "/employee/login",
            "/employee/logout",
            "/backend/**",      //各类静态页面
            "/front/**"         //各类静态页面
    };

    //2.判断本次请求是否需要处理
    boolean check = check(urls,requestURI);

    //3.如果不需要处理,则直接放行
    if (check){
        log.info("本次请求{}不需要处理",requestURI);   //输出日志
        filterChain.doFilter(request,response);
        return;
    }

    //4.判断登录状态,如果已登录,则直接放行
    if (request.getSession().getAttribute("employee") != null){
        log.info("用户已登录,用户id为:{}",request.getSession().getAttribute("employee"));
        filterChain.doFilter(request,response);
        return;
    }

    log.info("用户未登录");
    //5.如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据
    response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
    return;
}

/**
 * 路径匹配,检查本次请求是否需要放行
 * @param requestURI
 * @return
 */
public boolean check(String[] urls,String requestURI){
    for (String url : urls) {
        boolean match = PATH_MATCHER.match(url, requestURI);
        if (match){
            return true;
        }
    }
    return false;
}

}

2、启动器中添加@ServletComponentScan注解

扫描过滤器

在这里插入图片描述

3、拦截结果

在这里插入图片描述完善结果
在这里插入图片描述

方法二:使用拦截器

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值