package cn.stylefeng.rest.core.security;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.stylefeng.rest.core.security.base.BaseSecurityInterceptor;
|
import cn.stylefeng.roses.kernel.auth.api.AuthServiceApi;
|
import cn.stylefeng.roses.kernel.auth.api.exception.AuthException;
|
import cn.stylefeng.roses.kernel.auth.api.exception.enums.AuthExceptionEnum;
|
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
/**
|
* 鉴权的过滤器,用来鉴权token
|
*
|
* @author fengshuonan
|
* @since 2020/12/15 22:45
|
*/
|
@Component
|
@Slf4j
|
public class AuthJwtTokenSecurityInterceptor extends BaseSecurityInterceptor {
|
|
/**
|
* 登陆服务Api
|
*/
|
@Resource
|
private AuthServiceApi authServiceApi;
|
|
@Override
|
public void filterAction(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, ResourceDefinition resourceDefinition, String token) {
|
|
// 1. 获取当前请求的路径
|
String requestURI = httpServletRequest.getRequestURI();
|
|
// 2. 如果需要登录
|
if (resourceDefinition.getRequiredLoginFlag()) {
|
|
// token为空,返回用户校验失败
|
if (StrUtil.isEmpty(token)) {
|
throw new AuthException(AuthExceptionEnum.TOKEN_GET_ERROR);
|
}
|
|
// 3.校验token和用户会话信息是否正确
|
authServiceApi.checkAuth(token, requestURI);
|
}
|
}
|
|
}
|