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.PermissionServiceApi;
|
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;
|
|
/**
|
* 权限校验的过滤器,用来校验用户有没有访问接口的权限
|
*
|
* @author fengshuonan
|
* @since 2020/12/15 22:46
|
*/
|
@Component
|
@Slf4j
|
public class PermissionSecurityInterceptor extends BaseSecurityInterceptor {
|
|
/**
|
* 资源权限校验API
|
*/
|
@Resource
|
private PermissionServiceApi permissionServiceApi;
|
|
@Override
|
public void filterAction(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, ResourceDefinition resourceDefinition, String token) {
|
|
// 1. 获取当前请求的路径
|
String requestURI = httpServletRequest.getRequestURI();
|
|
// 2. 如果需要鉴权
|
if (resourceDefinition.getRequiredPermissionFlag()) {
|
|
// token为空,返回用户校验失败
|
if (StrUtil.isEmpty(token)) {
|
throw new AuthException(AuthExceptionEnum.TOKEN_GET_ERROR);
|
}
|
|
// 3. 进行当前接口的权限校验
|
permissionServiceApi.checkPermission(token, requestURI);
|
}
|
}
|
|
}
|