设置url拦截器,为接口设置一道安全验证机制
package com.toy.jyzc.Filter; import cn.hutool.json.JSONObject; import org.springframework.context.annotation.Configuration; 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; @WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*") @Configuration 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 requestURI = request.getRequestURI(); //定义不需要处理的请求路径 String[] urls = new String[]{ "/login", "/404", "/error", "/login/getCode", "/static/**" }; //2.判断本次请求是否需要处理 boolean check = check(urls,requestURI); //3.如果不需要处理,则直接放行 if(check) { filterChain.doFilter(request, response); return; } //4.判断登录状态,如果已登录,则直接放行 if(request.getSession().getAttribute("sys_authorToken") != null) { // Long id = (Long) request.getSession().getAttribute("employee"); // BaseContext.setCurrentId(id); //验证身份 filterChain.doFilter(request, response); return; } // // //5.如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据 // response.getWriter().write("{\"code\":\"400\",\"msg\":\"未登录\"}"); //跳转登录页面 response.sendRedirect("/login"); return; } /** * 路径匹配,检查本次请求是否需要放行 * @param urls * @param requestURI * @return 需要放行:true, 否则:false */ public boolean check(String[] urls, String requestURI) { for (String url : urls) { boolean match = PATH_MATCHER.match(url, requestURI); if(match) { return true; } } return false; } }
上面对相关地址,资源进行了放行
"/login", "/404", "/error", "/login/getCode", "/static/**"
你也可以对如/api等设置验证机制