tlias管理系统--登录校验--拦截器实现登录校验功能
This commit is contained in:
@@ -16,6 +16,6 @@ public class WebConfig implements WebMvcConfigurer {
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
//注册拦截器,并设置拦截资源路径
|
||||
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**");
|
||||
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
@WebFilter(urlPatterns = "/*")//登录校验过滤器,拦截所有的资源请求
|
||||
//@WebFilter(urlPatterns = "/*")//登录校验过滤器,拦截所有的资源请求
|
||||
@Slf4j
|
||||
public class LoginCheckFilter implements Filter {
|
||||
@Override
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
package com.inmind.interceptor;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.inmind.pojo.Result;
|
||||
import com.inmind.utils.JwtUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/*
|
||||
* 使用了spring的拦截器,实现了登录校验JWT的功能
|
||||
* */
|
||||
@Component
|
||||
@Slf4j
|
||||
public class LoginCheckInterceptor implements HandlerInterceptor {
|
||||
@@ -15,7 +23,39 @@ public class LoginCheckInterceptor implements HandlerInterceptor {
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
System.out.println("preHandle 执行了");
|
||||
// return true;//放行,那么控制器的资源就可以被访问
|
||||
return false;//不放行,那么控制器的资源就不可以被访问
|
||||
// return false;//不放行,那么控制器的资源就不可以被访问
|
||||
|
||||
|
||||
//1.获取请求url(之前都是通过HttpServletRequest获取请求)
|
||||
String url = request.getRequestURI();//http://localhost:8080/login或者http://localhost:8080/emps
|
||||
log.info("请求url:"+url);
|
||||
//2.判断请求url中是否有login,如果包含那就是登录接口,直接放行
|
||||
if (url.contains("login")) {
|
||||
log.info("当前是登录请求,直接放行");
|
||||
return true;
|
||||
}
|
||||
//3.如果不是登录操作,获取请求头中的令牌
|
||||
String jwt = request.getHeader("token");
|
||||
|
||||
//4.判断令牌是否存在
|
||||
if (!StringUtils.hasLength(jwt)) {
|
||||
log.info("令牌不存在,直接响应未登录状态");
|
||||
// 未登录的响应实现
|
||||
notLogin(response);
|
||||
return false;
|
||||
}
|
||||
|
||||
//5.判断令牌的合法性,如果不合法则,响应未登录状态
|
||||
try {
|
||||
JwtUtils.parseJWT(jwt);
|
||||
} catch (Exception e) {
|
||||
//未登录的响应实现
|
||||
notLogin(response);
|
||||
return false;
|
||||
}
|
||||
|
||||
//放行
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -27,4 +67,16 @@ public class LoginCheckInterceptor implements HandlerInterceptor {
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
System.out.println("afterCompletion");
|
||||
}
|
||||
|
||||
|
||||
private void notLogin(HttpServletResponse response) throws IOException {
|
||||
//根据接口文档响应json,之前通过spring的控制器的@ResponseBody注解自动转换为json返回
|
||||
//但是当前不是控制器,所以我们要手动封装json数据响应
|
||||
Result error = Result.error("NOT_LOGIN");
|
||||
//手动将java对象转为json字符串----阿里巴巴fastJson
|
||||
String notLoginJson = JSONObject.toJSONString(error);
|
||||
//响应数据通过响应对象,直接返回给浏览器(客户端)
|
||||
response.getWriter().write(notLoginJson);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user