jiansgk 2024-08-28 10:32 采纳率: 50%
浏览 19

springboot前端js拦截器不生效

#springboot项目,前端设置js响应拦截器实现跳转,项目启动后未登陆直接访问其他界面拦截器不生效,需要有登陆信息后访问该界面后拦截器才生效
#浏览器F12查看source,未全部加载静态资源文件夹
#理想效果:未登陆访问其他页面应被前端拦截器拦截后,跳转到登陆页面,实际效果:直接将响应输出到浏览器;

未登陆直接访问页面

img

登陆页面信息

img

js前端拦截器

img

过滤器


package com.itheima.reggir_takeout.filter;

import com.alibaba.fastjson.JSON;
import com.itheima.reggir_takeout.common.Result;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
@WebFilter("/*")
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {


        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        //放行样式文件、图片、js、api、plugin文件
        String[] uris = {"/login.html", "/api/", "/images/", "/js/", "/styles/", "/plugins/", "employee/login", "employee/logout"};

        String uri = request.getRequestURI(); //"/项目名/请求路径"

        System.out.println("获取的资源路径:" + uri);
        //判断是否为可放行资源
        for (String url : uris) {
            //若属于放行资源则直接放行
            if (uri.contains(url)) {
                filterChain.doFilter(request, servletResponse);
                return;
            }
        }
        //否则需要进行判断
        //Session域中若没有employee_id则证明没有登陆信息不能登陆到其他页面
        if (request.getSession().getAttribute("employee_id") == null) {

            String jsonString = JSON.toJSONString(Result.error("NOTLOGIN"));
            response.getWriter().write(jsonString);
            return;

        } else {
            filterChain.doFilter(request, servletResponse);
        }


    }
}

静态资源页面

img

  • 写回答

3条回答 默认 最新

  • 软件技术NINI 2024-08-28 11:09
    关注
     
    package com.itheima.reggir_takeout.filter;
     
    import com.alibaba.fastjson.JSON;
    import com.itheima.reggir_takeout.common.Result;
    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebFilter;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Component;
     
    import java.io.IOException;
     
    @Component
    @WebFilter("/*")
    public class LoginFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     
     
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            //放行样式文件、图片、js、api、plugin文件
            String[] uris = {"/login.html", "/api/", "/images/", "/js/", "/styles/", "/plugins/", "employee/login", "employee/logout"};
     
            String uri = request.getRequestURI(); //"/项目名/请求路径"
     
            System.out.println("获取的资源路径:" + uri);
            //判断是否为可放行资源
            for (String url : uris) {
                //若属于放行资源则直接放行
                if (uri.contains(url)) {
                    filterChain.doFilter(request, servletResponse);
                    return;
                }
            }
            //否则需要进行判断
            //Session域中若没有employee_id则证明没有登陆信息不能登陆到其他页面
            if (request.getSession().getAttribute("employee_id") == null) {
     
                String jsonString = JSON.toJSONString(Result.error("NOTLOGIN"));
                response.getWriter().write(jsonString);
                return;
     
            } else {
                filterChain.doFilter(request, servletResponse);
            }
     
     
        }
    }
     
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月28日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?