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