提交 a0b71c98 编写于 作者: IIIllI's avatar IIIllI

拦截器

上级 01e91fcc
......@@ -98,6 +98,13 @@ public class CommonResult<T> {
/**
* 未登录返回结果
*/
public static <T> CommonResult<T> nologgedin(T data) {
return new CommonResult<T>(ResultCode.NOT_LOGGIN_IN.getCode(), ResultCode.NOT_LOGGIN_IN.getMessage(), data);
}
/**
* token过期返回结果
*/
public static <T> CommonResult<T> unauthorized(T data) {
return new CommonResult<T>(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getMessage(), data);
}
......@@ -109,6 +116,7 @@ public class CommonResult<T> {
return new CommonResult<T>(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getMessage(), data);
}
public long getCode() {
return code;
}
......
......@@ -10,7 +10,8 @@ public enum ResultCode implements IErrorCode {
SUCCESS(200, "操作成功"),
FAILED(500, "操作失败"),
VALIDATE_FAILED(404, "参数检验失败"),
UNAUTHORIZED(401, "暂未登录或token已经过期"),
UNAUTHORIZED(401, "token已经过期"),
NOT_LOGGIN_IN(401, "暂未登录"),
FORBIDDEN(403, "没有相关权限");
private long code;
......
package com.nav.common.config;
import com.nav.common.security.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @ClassName WebMvcConfig
* @Description: mvc配置类
* @Author lyc
* @Date 2022/4/29 21:25
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:8087")
.allowedOrigins("http://47.95.151.202:8087");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login")
.excludePathPatterns("/register");
}
}
......@@ -8,4 +8,5 @@ package com.nav.common.log;
*/
public class LogAspect {
}
package com.nav.common.security;
import com.alibaba.fastjson.JSON;
import com.nav.common.api.CommonResult;
import com.nav.common.api.ResultCode;
import com.nav.utils.JwtUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @ClassName LoginInterceptor
......@@ -10,5 +21,25 @@ import org.springframework.stereotype.Component;
*/
@Component
public class LoginInterceptor {
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
return true;
}
String token = request.getHeader("Authorization");
if (StringUtils.isBlank(token)) {
response.setContentType("application/json;charset=utf-8");
response.getWriter().print(JSON.toJSONString(CommonResult.failed(ResultCode.NOT_LOGGIN_IN)));
return false;
}
Map<String, Object> tokenMap = JwtUtils.verifyToken(token);
if (tokenMap.containsKey("tokenException")) {
return false;
}
return true;
}
}
package com.nav.utils;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.*;
import java.util.Date;
import java.util.HashMap;
......@@ -41,16 +38,18 @@ public class JwtUtils {
/**
* 校验token
*
* @param token
* @return
*/
public static Map<String, Object> verifyToken(String token) {
Map<String, Object> map = new HashMap<>();
try {
Jwt parse = Jwts.parser().setSigningKey(sign).parse(token);
return (Map<String, Object>) parse.getBody();
} catch (Exception e) {
e.printStackTrace();
map = (Map<String, Object>) parse.getBody();
} catch (JwtException e) {
map.put("tokenException",e.getMessage());
}
return null;
return map;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册