JEECG3.3.0通过注解方式过滤Token

先说原理:
springMVC的工作流程中,前端所有的访问路径都会统一的进入到DispatcherServlet 中,DispatcherServlet 会拿着前端的url去处理器映射器 (HandlerMapping)找url与方法(类)的映射关系。通过映射关系确定那个类中的那个方法。
根据这一流程,我们可以借此改造

改造流程:
增加一个注解

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IgnoreAuth {

}

修改JwtFilter(org/jeecg/config/shiro/filters/JwtFilter.java)中的isAccessAllowed方法

@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
    try {
        // lizhihui-insert date:2022/9/3 for:增加通过注解方式忽略登录校验
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        RequestMappingHandlerMapping mapping = SpringContextUtils.getBean(RequestMappingHandlerMapping.class);
        //根据request获取到具体方法
        HandlerExecutionChain handler = mapping.getHandler(httpServletRequest);
        if(handler != null && handler.getHandler() instanceof HandlerMethod){
            HandlerMethod handlerMethod = (HandlerMethod) handler.getHandler();
            //判断方法上是否有注解
            IgnoreAuth methodAnnotation = handlerMethod.getMethodAnnotation(IgnoreAuth.class);
            if(methodAnnotation != null){
                return true;
            }
            //判断类上是否有注解
            IgnoreAuth typeAnnotation = handlerMethod.getBeanType().getAnnotation(IgnoreAuth.class);
            if (typeAnnotation != null) {
                return true;
            }
        }
        // lizhihui-insert-end date:2022/9/3 for:增加通过注解方式忽略登录校验
        executeLogin(request, response);
        return true;
    } catch (Exception e) {
        JwtUtil.responseError(response,401,CommonConstant.TOKEN_IS_INVALID_MSG);
        return false;
        //throw new AuthenticationException("Token失效,请重新登录", e);
    }
}

完成配置
只需在需要过滤的方法或类上加上@IgnoreAuth 即可

DEBUG注意点:
在这里插入图片描述
Mapping是前端URL与方法的映射关系
在这里插入图片描述
当前URL下的方法名称

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值