Flyinsky's Codes
250 字
1 分钟
基于Session状态的拦截未登陆用户

基于Session状态的拦截未登陆用户#

​ 如果你的SpringBoot的用户状态主要是由Session去管理的话,你会发现每个接口添加HttpSession的话也可以拦截未登陆用户,因为会给其返回一个500的错误,但是这样一不正式二很麻烦。我们可以使用拦截器去统一查看用户的session状态。

public class RestfulSessionCheckInterceptor implements HandlerInterceptor { private final ObjectMapper objectMapper = new ObjectMapper(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if (session.getAttribute("logonUserInfo") == null) { response.setContentType("application/json;charset=UTF-8"); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); Map<String, Object> result = new HashMap<>(); result.put("success", false); result.put("message", "您尚未登陆,拒绝访问。"); PrintWriter out = response.getWriter(); out.print(objectMapper.writeValueAsString(result)); out.flush(); return false; } return true; } }

然后在处理跨域的配置类中向注册器添加拦截器类即可:

@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new RestfulSessionCheckInterceptor()) .addPathPatterns("/api/**") // 拦截所有 /api 路径下的请求 .excludePathPatterns( "/api/user/login", // 排除登录接口 "/api/user/register", // 排除注册接口 "/api/user/code", "/api/public/**" // 排除所有公开接口 ); } }