设置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等设置验证机制